Salam! JavaRush-dan geçip barýarkaňyz, ýönekeý görnüşlere bir gezekden köp duş geldiňiz. Ine, olar hakda bilýänlerimiziň gysga sanawy:
Valuesöne gymmatlyklardan başga-da görnüşler ýadyň ululygy bilen tapawutlanýar.
Görnüşiň
- Olar obýekt däl we ýatda saklanýan bahany görkezýär
- Ilkinji görnüşleriň birnäçe görnüşi bar:
- Numbershli sanlar -
byte
,,,short
int
long
- Loüzýän nokatlaryň sanlary (fraksiýa) -
float
wedouble
- Boolean -
boolean
- Simwoliki (harplary we sanlary görkezmek üçin) -
char
- Numbershli sanlar -
- Olaryň hersiniň öz gymmatlyklary bar:
Ilkinji görnüş | Memoryadyň ululygy | Gymmatlyklaryň diapazony |
---|---|---|
baýt | 8 bit | -128-den 127-e çenli |
gysga | 16 bit | -32768-den 32767-e çenli |
char | 16 bit | 0-dan 65536-a çenli |
int | 32 bit | -2147483648-den 2147483647-e çenli |
uzyn | 64 bit | -9223372036854775808-den 9223372036854775807-e çenli |
ýüzmek | 32 bit | (2-den güýje -149) çenli ((2-2 güýç -23) * 2-den 127-e çenli) |
goşa | 64 bit | (-2-den 63-e çenli) ((2-den 63-e çenli) - 1) |
boolean | 8 (massiwlerde ulanylanda), 32 (massiw däl ulanylanda) | dogry ýa-da ýalan |
int
köp zady alýar byte
. J long
- köp short
. Ilkinjileriň tutýan ýadynyň mukdaryny höwürtge gurjaklary bilen deňeşdirip bolar: Höwürtge gurjagynyň içinde boş ýer bar. Höwürtge gurjagy näçe uly bolsa, şonça-da köp ýer. Uly höwürtge gurjagynyň içinde long
kiçisini aňsatlyk bilen goýup bileris int
. Bu aňsatlyk bilen gabat gelýär we goşmaça bir zat etmegiň zerurlygy ýok. Java-da, ilkinjiler bilen işlenende, awtomatiki öwrülişik diýilýär. Başga bir usul bilen giňeltmek diýilýär. Ine, ýönekeý giňeltme mysaly:
public class Main {
public static void main(String[] args) {
int bigNumber = 10000000;
byte littleNumber = 16;
bigNumber = littleNumber;
System.out.println(bigNumber);
}
}
byte
Bu ýerde üýtgeýjä baha belläris int
. Bu ýumuş üstünlikli boldy we hiç hili kynçylyksyz: ýatda saklanylýan baha, byte
“laýyk” bolanyndan has az ýat tutýar int
. “Kiçijik höwürtge gurjagy” (gymmaty byte
) “uly matrioşka” (üýtgeýän int
) aňsatlyk bilen gabat gelýär. Munuň tersini etjek bolanyňyzda başga mesele - beýle ululyklar üçin döredilmedik üýtgeýjä uly baha goýuň. Aslynda, bu hile hakyky höwürtge gurjaklary bilen işlemez, ýöne Java-da işlär, ýöne nuanslar bilen. int
Üýtgeýjä baha goýmaga synanyşalyň short
:
public static void main(String[] args) {
int bigNumber = 10000000;
short littleNumber = 1000;
littleNumber = bigNumber;//error!
System.out.println(bigNumber);
}
Roralňyşlyk! Düzüji, standart däl bir zat etjek bolýandygyňyza düşünýär we int
kiçijik bir ( short
) içinde uly matrioşka gurjagyny () goýýar. Bu ýagdaýda düzülen ýalňyşlyk düzüjiniň duýduryşy: “ Heý, muny etmek isleýändigiňize ynanýarsyňyzmy? "Ynanýan bolsaňyz, düzüjä bu barada aýdyň:" Hemme zat gowy, näme edýändigimi bilýärin! " “Bu prosese aç-açan görnüşe öwrülmek ýa-da daralmak diýilýär . Daralmak üçin, bahaňyzy goýmak isleýän görnüşiňizi aç-açan görkezmeli. Başgaça aýdylanda, düzüjiniň soragyna jogap beriň: “ Bolýar, bu kiçijik gurjaklaryň haýsysyny bu uly gurjak goýmak isleýärsiňiz?” "Biziň ýagdaýymyzda şeýle bolar:
public static void main(String[] args) {
int bigNumber = 10000000;
short littleNumber = 1000;
littleNumber = (short) bigNumber;
System.out.println(littleNumber);
}
int
Bahany üýtgeýjä laýyk getirmek short
we onuň üçin jogapkärçilik çekmek isleýändigimizi aç-açan görkezdik . Has düzüji, has dar görnüşiň aç-açan görkezilmegini görüp, öwrülişik edýär. Netije näme bolar? Konsol çykyşy: -27008 Birneme garaşylmadyk. Näme üçin beýle meňzeýär? Aslynda ýönekeý. int
Asyl bahasy bardy - 10000000 32 bit alýan üýtgeýjide saklandy we ikilik görnüşinde şeýle boldy: Bu bahany üýtgeýjä ýazýarys short
, ýöne ol diňe 16 bit saklap bilýär! Şoňa laýyklykda nomerimiziň diňe ilkinji 16 biti şol ýere göçüriler, galanlary taşlanar. Netijede, üýtgeýjide onluk görnüşde -27008 deň bolan short
bahany öz içine alar , şonuň üçin düzüji belli bir görnüşe aç-açan guýmak görnüşinde “tassyklama sorady”. Birinjiden, netijäniň jogapkärçiligini öz üstüňe alýandygyňy görkezýär, ikinjiden, görnüşlere guýlanda düzüjä näçe ýer bölmelidigini aýdýar. int
Galyberse-de, iň soňky mysalda ýazmak üçin atan bolsak byte
, ýazmazdyk short
, 16 däl-de, biziň ygtyýarymyzda bary-ýogy 8 bit bolardy we netijesi başgaça bolardy. Bölekleýin görnüşler ( float
we double
) üçin daralmak başgaça bolýar. Şeýle sanlary bitewi görnüşe öwürjek bolsaňyz, onuň bölek bölegi taşlanar.
public static void main(String[] args) {
double d = 2.7;
long x = (int) d;
System.out.println(x);
}
Konsol çykyşy: 2
Maglumatlaryň görnüşi
Char görnüşiniň aýratyn nyşanlary görkezmek üçin ulanylýandygyny eýýäm bilýärsiňiz.public static void main(String[] args) {
char c = '!';
char z = 'z';
char i = '8';
}
Itöne düşünmek üçin möhüm bolan birnäçe aýratynlyk bar. Geliň, bahalar aralygy bilen tablisa ýene bir gezek seredeliň:
Ilkinji görnüş | Memoryadyň ululygy | Gymmatlyklaryň diapazony |
---|---|---|
baýt | 8 bit | -128-den 127-e çenli |
gysga | 16 bit | -32768-den 32767-e çenli |
char | 16 bit | 0-dan 65536-a çenli |
int | 32 bit | -2147483648-den 2147483647-e çenli |
uzyn | 64 bit | -9223372036854775808-den 9223372036854775807-e çenli |
ýüzmek | 32 bit | (2-den güýje -149) çenli ((2-2 güýç -23) * 2-den 127-e çenli) |
goşa | 64 bit | (-2-den 63-e çenli) ((2-den 63-e çenli) -1) |
boolean | 8 (massiwlerde ulanylanda), 32 (massiw däl ulanylanda) | dogry ýa-da ýalan |
char
0 bilen 65536 aralygy aralygy bar. Thisöne bu nämäni aňladýar? Galyberse-de, char
bular diňe sanlar däl, eýsem harplar, dyngy belgileri hem ... Hakykat, bahalaryň char
Java-da icunikod görnüşinde saklanmagydyr. Öňki leksiýalaryň birinde “Unicode” bilen eýýäm duşuşdyk. Icunikodyň dünýäniň ähli ýazylan dillerinden diýen ýaly nyşanlary öz içine alýan nyşan kodlaýyş standartydygyny ýadyňyzdan çykarsaňyz gerek . Başga sözler bilen aýdylanda, bu islendik dilden islendik nyşan üçin kod bar bolan ýörite kodlaryň sanawy. Umumy “Unicode” tablisasy gaty uly we elbetde, ýatdan öwrenmegiň zerurlygy ýok. Bu ýerde, mysal üçin, onuň bir bölegi: Esasy zat gymmatlyklary saklamak ýörelgesine düşünmek char
we belli bir nyşanyň koduny bilmek bilen ony hemişe programmada alyp boljakdygyny ýadyňyzdan çykarmaň. Muny tötänleýin san bilen synap göreliň:
public static void main(String[] args) {
int x = 32816;
char c = (char) x ;
System.out.println(c);
}
Konsol çykyşy: characters Bu, Java-da nyşanlaryň saklanýan formaty char
. Her nyşan bir sana gabat gelýär - 16 bitli san kody ýa-da iki baýt. Icunikod 32816 the belgisine gabat gelýär. Şu pursata üns beriň. Bu mysalda üýtgeýjini ulandyk int
. 32 bit ýat tutýar , char
16 bolsa . Bu ýerde saýladyk , sebäbi zerur bolan 32816 sany, çäkden çykýar . Ululygy , gysga ýaly, 16 bit bolsa-da, aralykda negatiw sanlar ýok, şonuň üçin “polo positiveitel” diapazon iki esse uludyr (32767 ýerine 65536 ). Kodumyz 65536 aralygynda bolsa, ulanyp bileris. Aöne san döredsek , 16 bitden köp bolar. Görnüşleri daralanda: int
short
char
char
char
short
int
int >65536
char c = (char) x;
goşmaça bitler taşlanar we netijesi garaşylmadyk bolar.
Çar we bitewi sanlary goşmagyň aýratynlyklary
Geliň, bu üýtgeşik mysala seredeliň:public class Main {
public static void main(String[] args) {
char c = '1';
int i = 1;
System.out.println(i+c);
}
}
Konsol çykyşy: 50 O_O Logika nirede? 1 + 1, 50 nireden geldi ?! char
Gymmatlyklarymyzyň 0-dan 65536 aralygynda san hökmünde saklanýandygyny, häsiýetimiziň icunikodyny aňladýandygyny eýýäm bilýärsiňiz . Ine, şu ýerde. Goşmaçany ýerine ýetirenimizde char
we bitewi san görnüşi char
icunikodda oňa laýyk gelýän sana öwrülýär. Kodymyzda 1 we '1' goşanymyzda, '1' nyşany 49 kody üýtgedildi (ýokardaky tablisada barlap bilersiňiz). Şonuň üçin netije 50-e deň boldy. Geliň, ýene bir gezek köne dostumyzy - mysal alalyň we ony san bilen goşmaga synanyşalyň.
public static void main(String[] args) {
char c = '耰';
int x = 200;
System.out.println(c + x);
}
Konsol çykyşy: 33016耰32816 kody bilen gabat gelýändigini eýýäm bildik. Bu belgini we 200-i goşanymyzda, netijämizi alarys - 33016 :) Görşüňiz ýaly iş mehanizmi gaty ýönekeý.
GO TO FULL VERSION