Hello! Nalika ngliwati JavaRush, sampeyan nemokake jinis primitif luwih saka sepisan. Mangkene dhaptar ringkes babagan apa sing kita ngerti babagan dheweke:
Nanging, saliyane kanggo nilai, jinis uga beda-beda ing ukuran memori.
Jinis kasebut
- Padha ora obyek lan makili nilai sing disimpen ing memori
- Ana sawetara jinis jinis primitif:
- Nomer wutuh -
byte
,short
,int
,long
- Nomer titik ngambang (fractional) -
float
landouble
- Boolean -
boolean
- Simbolik (kanggo nunjukake huruf lan angka) -
char
- Nomer wutuh -
- Saben wong duwe sawetara nilai dhewe:
Tipe primitif | Ukuran ing memori | Range saka nilai |
---|---|---|
bait | 8 bit | -128 kanggo 127 |
cendhak | 16 bit | kanggo -32768 kanggo 32767 |
char | 16 bit | saka 0 kanggo 65536 |
int | 32 bit | saka -2147483648 kanggo 2147483647 |
dawa | 64 bit | saka -9223372036854775808 nganti 9223372036854775807 |
ngambang | 32 bit | saka (2 kanggo daya -149) kanggo ((2-2 kanggo daya -23)*2 kanggo daya 127) |
pindho | 64 bit | saka (-2 kanggo daya 63) kanggo ((2 kanggo daya saka 63) - 1) |
boolean | 8 (yen digunakake ing array), 32 (yen digunakake ing non-array) | bener utawa salah |
int
njupuk luwih saka byte
. A long
- luwih saka short
. Jumlah memori sing dikuwasani dening primitif bisa dibandhingake karo boneka nesting: Ana ruang bebas ing jero boneka nesting. Sing luwih gedhe boneka nesting, luwih akeh papan. long
Kita bisa kanthi gampang nyelehake sing luwih cilik ing njero boneka nesting gedhe int
. Iku gampang pas lan sampeyan ora perlu nindakake apa-apa ekstra. Ing Jawa, nalika nggarap primitif, iki diarani konversi otomatis. Kanthi cara liya diarani extension. Punika conto ekstensi prasaja:
public class Main {
public static void main(String[] args) {
int bigNumber = 10000000;
byte littleNumber = 16;
bigNumber = littleNumber;
System.out.println(bigNumber);
}
}
Ing kene kita nemtokake nilai byte
kanggo variabel int
. Tugas kasebut sukses lan tanpa masalah: nilai sing disimpen ing byte
ruang memori kurang saka "cocog" ing int
. "Boneka nesting cilik" (nilai byte
) gampang pas karo "matryoshka gedhe" (variabel int
). Masalah liyane nalika sampeyan nyoba ngelawan - lebokake nilai gedhe menyang variabel sing ora dirancang kanggo ukuran kasebut. Ing asas, trik iki ora bakal bisa digunakake karo boneka nesting nyata, nanging ing Jawa bakal bisa, nanging karo nuansa. Ayo nyoba nglebokake nilai int
menyang variabel short
:
public static void main(String[] args) {
int bigNumber = 10000000;
short littleNumber = 1000;
littleNumber = bigNumber;//error!
System.out.println(bigNumber);
}
Kesalahan! Compiler mangertos sing nyoba kanggo nindakake soko non-standar, lan sijine boneka matryoshka gedhe ( int
) nang cilik ( short
). Kesalahan kompilasi ing kasus iki minangka peringatan saka kompiler: " Hei, sampeyan yakin pengin nindakake iki? "Yen sampeyan yakin, kandhani kompilator babagan iki:" Kabeh ora apa-apa, aku ngerti apa sing ditindakake!" ” Proses iki diarani konversi jinis eksplisit, utawa narrowing . Kanggo nggawe penyempitan, sampeyan kudu kanthi tegas nunjukake jinis sing sampeyan pengin menehi nilai. Kanthi tembung liya, wangsulana pitakon kompiler: " Lha, boneka cilik iki sing endi sing pengin dilebokake boneka gedhe iki?" "Ing kasus kita bakal katon kaya iki:
public static void main(String[] args) {
int bigNumber = 10000000;
short littleNumber = 1000;
littleNumber = (short) bigNumber;
System.out.println(littleNumber);
}
Kita kanthi tegas nuduhake yen kita pengin nyetel nilai kasebut int
dadi variabel short
lan tanggung jawab. Compiler, ndeleng indikasi eksplisit saka jinis sempit, nindakake konversi. Apa asile? Output konsol: -27008 A dicokot ora dikarepke. Kenapa persis kaya iki? Iku bener prasaja. Kita duwe nilai asli - 10000000 Iki disimpen ing variabel int
sing njupuk 32 bit, lan ing bentuk binar katon kaya iki: Kita nulis nilai iki menyang variabel short
, nanging mung bisa nyimpen 16 bit! Mulane, mung 16 bit pisanan saka nomer kita bakal dipindhah ana, liyane bakal dibuwang. Akibaté, variabel short
bakal ngemot nilai , sing ing wangun desimal persis padha karo -27008 Mulane compiler "takon konfirmasi" ing wangun cast eksplisit kanggo jinis tartamtu. Sepisanan, iku nuduhake yen sampeyan njupuk tanggung jawab kanggo asil, lan sareh, iku ngandhani compiler carane akeh papan kanggo nyedhiakke nalika casting jinis. Sawise kabeh, yen ing conto pungkasan kita wis cast int
kanggo ngetik byte
, lan ora kanggo short
, kita bakal duwe mung 8 bit ing pembuangan kita, ora 16, lan asil bakal wis beda. Kanggo jinis pecahan ( float
lan double
), narrowing dumadi beda. Yen sampeyan nyoba ngowahi angka kasebut dadi jinis integer, bagean pecahan kasebut bakal dibuwang.
public static void main(String[] args) {
double d = 2.7;
long x = (int) d;
System.out.println(x);
}
Output konsol: 2
Tipe data char
Sampeyan wis ngerti yen jinis char digunakake kanggo nampilake karakter individu.public static void main(String[] args) {
char c = '!';
char z = 'z';
char i = '8';
}
Nanging nduweni sawetara fitur sing penting kanggo ngerti. Ayo katon maneh ing tabel kanthi rentang nilai:
Tipe primitif | Ukuran ing memori | Range saka nilai |
---|---|---|
bait | 8 bit | -128 kanggo 127 |
cendhak | 16 bit | -32768 kanggo 32767 |
char | 16 bit | saka 0 kanggo 65536 |
int | 32 bit | saka -2147483648 kanggo 2147483647 |
dawa | 64 bit | saka -9223372036854775808 nganti 9223372036854775807 |
ngambang | 32 bit | saka (2 kanggo daya -149) kanggo ((2-2 kanggo daya -23)*2 kanggo daya 127) |
pindho | 64 bit | saka (-2 kanggo daya 63) kanggo ((2 kanggo daya saka 63)-1) |
boolean | 8 (yen digunakake ing array), 32 (yen digunakake ing non-array) | bener utawa salah |
char
duwe sawetara angka saka 0 nganti 65536. Nanging apa tegese iki? Sawise kabeh, char
iki ora mung angka, nanging uga huruf, tandha wacan ... Kasunyatane yen nilai char
disimpen ing Jawa ing format Unicode. Kita wis nemoni Unicode ing salah sawijining kuliah sadurunge. Sampeyan bisa uga eling yen Unicode minangka standar enkoding karakter sing kalebu karakter saka meh kabeh basa sing ditulis ing donya. Ing tembung liya, iki minangka dhaptar kode khusus sing ana kode kanggo meh kabeh karakter saka basa apa wae. Tabel Unicode umum gedhe banget lan, mesthi, ora perlu sinau kanthi ati-ati. Kene, contone, Piece saka iku: Wangsulan: Bab ingkang utama punika mangertos prinsip nyimpen nilai char
, lan elinga yen ngerti kode saka simbol tartamtu, sampeyan bisa tansah njaluk iku ing program. Coba iki kanthi nomer acak:
public static void main(String[] args) {
int x = 32816;
char c = (char) x ;
System.out.println(c);
}
Output konsol: 耰 Iki format sing karakter disimpen ing Jawa char
. Saben karakter cocog karo nomer - kode angka 16 bit, utawa rong bita. Unicode 32816 cocog karo karakter 耰. Pay manungsa waé kanggo wayahe iki. Ing conto iki, kita nggunakake variabel int
. Iku ngenggoni 32 bit memori , nalika char
16 . Ing kene kita milih amarga nomer sing kita butuhake, 32816, ora ana ing kisaran . Senajan ukuran , kaya cendhak, 16 bit, ora ana nomer negatif ing sawetara, supaya "positif" sawetara kaping pindho minangka gedhe (65536 tinimbang 32767 ). Kita bisa nggunakake , anggere kode kita ana ing kisaran 65536. Nanging yen kita nggawe nomer , bakal njupuk luwih saka 16 bit. Lan nalika narrowing mudhun jinis: int
short
char
char
char
short
int
int >65536
char c = (char) x;
bit ekstra bakal dibuwak, lan asil bakal cukup ora dikarepke.
Fitur tambahan saka char lan integer
Ayo ndeleng conto sing ora biasa iki:public class Main {
public static void main(String[] args) {
char c = '1';
int i = 1;
System.out.println(i+c);
}
}
Output konsol: 50 O_O Endi logika? 1 + 1, saka ngendi 50 teka?! Sampeyan wis ngerti yen nilai char
disimpen ing memori minangka angka ing kisaran saka 0 nganti 65536, sing makili Unicode karakter kita. Dadi ing kene. Nalika kita nindakake tambahan char
lan sawetara jinis integer char
diowahi menyang nomer sing cocog karo ing Unicode. Nalika ing kode kita ditambahake 1 lan '1', simbol '1' diowahi dadi kode, yaiku 49 (sampeyan bisa mriksa ing tabel ing ndhuwur). Mulane, asil dadi padha karo 50. Ayo maneh njupuk kanca lawas -耰minangka conto , lan nyoba kanggo nambah karo sawetara nomer.
public static void main(String[] args) {
char c = '耰';
int x = 200;
System.out.println(c + x);
}
Output konsol: 33016 Kita wis ngerteni manawa耰cocog karo kode 32816. Lan nalika kita nambah nomer iki lan 200, kita entuk persis asil - 33016 :) Mekanisme operasi, kaya sing sampeyan ngerteni, cukup prasaja.
GO TO FULL VERSION