1. Typecasting
Variabel saka jinis primitif (kajaba jinis boolean
) digunakake kanggo nyimpen macem-macem jinis nomer. Sanajan jinis variabel ora tau diganti, ana papan sing bisa diowahi saka siji jinis menyang liyane. Lan papan kasebut minangka tugas .
Variabel saka macem-macem jinis bisa diutus kanggo saben liyane. Yen sampeyan nindakake iki, nilai variabel saka siji jinis diowahi dadi nilai jinis liyane lan ditugasake menyang variabel liya. Ing babagan iki, kita bisa ngenali rong jinis konversi jinis: widening lan narrowing.
Widening kaya kanggo mindhah nilai saka basket cilik menyang gedhe: operasi iki lancar lan ora krasa lara. Narrowing mengkono nalika sampeyan mindhah Nilai saka basket gedhe kanggo cilik: ana uga ora cukup papan, lan sampeyan kudu uncalan soko adoh.
Ing ngisor iki jinis-jinis, diurut miturut ukuran basket:
2. Widening jinis konversi
Asring perlu kanggo nemtokake variabel saka siji jinis numerik menyang variabel saka jinis numerik liyane. Kepiye carane nindakake?
Jawa nduweni 4 jinis integer:
Jinis | Ukuran |
---|---|
byte |
1 byte |
short |
2 bytes |
int |
4 bytes |
long |
8 bytes |
Variabel sing disimpen ing kranjang cilik bisa tansah ditugasake kanggo variabel sing disimpen ing kranjang sing luwih gedhe.
int
, short
lan byte
variabel bisa gampang ditugasake menyang long
variabel. short
lan byte
variabel bisa ditugasake kanggo int
variabel. Lan byte
variabel bisa ditugasake kanggo short
variabel.
Tuladha:
Kode | Katrangan |
---|---|
|
Kode iki bakal dikompilasi kanthi apik. |
Konversi kasebut, saka jinis sing luwih cilik dadi luwih gedhe, diarani konversi jinis widening .
Kepiye babagan nomer nyata?
Karo wong-wong mau, kabeh padha - ukuran penting:
Jinis | Ukuran |
---|---|
float |
4 bytes |
double |
8 bytes |
float
variabel bisa diutus kanggo double
variabel tanpa masalah. Nanging iku luwih menarik karo jinis integer.
Sampeyan bisa nemtokake variabel integer menyang float
variabel. Malah long
jinis, sing dawane 8 bita. Lan sampeyan bisa nemtokake apa wae sing dikarepake - variabel utawa float
variabel integer - menyang double
variabel:
Kode | Cathetan |
---|---|
|
|
Elinga yen ngonversi menyang jinis nyata bisa nyebabake mundhut presisi amarga ora cukup digit signifikan.
Nalika ngowahi saka integer menyang angka floating-point, bagean urutan ngisor nomer bisa dibuwak. Nanging amarga nomer pecahan dimangerteni kanggo nyimpen nilai kira-kira, operasi assignment kuwi diijini.
3. Narrowing jinis konversi
Apa babagan kemungkinan liyane? Apa yen sampeyan kudu nemtokake long
nilai menyang int
variabel?
Mbayangno variabel minangka basket. Kita duwe bakul saka macem-macem ukuran: 1, 2, 4 lan 8 bita. Ora masalah nransfer apel saka bakul cilik menyang sing luwih gedhe. Nanging nalika pindhah saka kranjang sing luwih gedhe menyang sing luwih cilik, sawetara apel bisa ilang.
Transformasi iki — saka jinis sing luwih gedhe dadi jinis sing luwih cilik — diarani konversi jinis sing sempit . Nalika nindakake operasi tugas kaya iki, bagean saka nomer bisa uga ora cocog karo variabel anyar lan mulane bisa dibuwang.
Nalika narrowing jinis, kita kudu tegas marang compiler sing kita ora nggawe kesalahan, sing kita sengaja discarding bagéan saka nomer. Operator typecast digunakake kanggo iki. Iki minangka jeneng jinis ing kurung .
Ing kahanan kaya mengkono, compiler Java mbutuhake programmer kanggo nemtokake operator typecast. Umumé, katon kaya iki:
(type) expression
Tuladha:
Kode | Katrangan |
---|---|
|
Saben operator typecast kudu dituduhake kanthi jelas |
Punika a
witjaksono kanggo 1
, lan mbok menawa operator typecast katon kaya overkill. Nanging kepiye yen a
luwih gedhe?
Kode | Katrangan |
---|---|
|
|
Siji yuta mathuk sampurna menyang long
lan menyang int
. Nanging nalika nemtokake siji yuta kanggo short
variabel, rong bait pisanan dibuwang, lan mung rong bait pungkasan sing disimpen. Lan nalika nemtokake kanggo a byte
, mung bab sing tetep byte pungkasan.
Carane nomer disusun ing memori:
Jinis | Notasi binar | Notasi desimal |
---|---|---|
int |
0b 00000000 00001111 01000010 01000000 | 1000000 |
short |
0b 01000010 01000000 | 16.960 |
byte |
0b 01000000 | 64 |
char
jinis
A char
, kaya a short
, manggoni rong bita, nanging kanggo ngowahi siji liyane, sampeyan kudu tansah nggunakake operator typecast. Masalah ing kene yaiku short
jinis kasebut ditandatangani lan bisa ngemot nilai saka -32,768
menyang +32,767
, nanging char
jinis kasebut ora ditandatangani lan bisa ngemot nilai saka 0
nganti 65,535
.
Nomer negatif ora bisa disimpen ing char
, nanging bisa disimpen ing short
. Lan short
ora bisa nyimpen nomer luwih gedhe tinimbang 32,767
, nanging nomer kuwi bisa disimpen ing char
.
4. Jinis ekspresi
Apa yen variabel saka macem-macem jinis digunakake ing ekspresi sing padha? Secara logis, kita ngerti manawa dheweke kudu diowahi dadi jinis umum. Nanging sing endi?
Kanggo sing luwih gedhe, mesthi.
Jawa tansah diowahi dadi jinis kang luwih gedhe. Kira-kira, salah siji saka jinis pisanan widened lan mung banjur operasi dileksanakake nggunakake nilai saka jinis padha.
Yen an int
lan a long
melu ekspresi, nilai kasebut int
bakal diowahi dadi a long
lan mung banjur operasi bakal diterusake:
Kode | Katrangan |
---|---|
|
a bakal widened kanggo a long banjur tambahan bakal kelakon. |
Angka floating-point
Yen integer lan nomer floating-point ( float
utawa double
) melu ekspresi, integer bakal diowahi dadi angka floating-point ( float
utawa double
), lan mung banjur operasi bakal dileksanakake.
Yen operasi kasebut kalebu a float
lan a double
, banjur float
bakal diowahi dadi a double
. Kang bener samesthine.
The byte
, short
, lan char
jinis tansah diowahi kanggo int
nalika sesambungan karo saben liyane. Ana alesan sing apik kenapa int
jinis kasebut dianggep minangka jinis integer standar.
Yen sampeyan multiply a byte
dening a short
, sampeyan bakal entuk int
. Yen sampeyan multiply a byte
dening a byte
, sampeyan bakal entuk int
. Sanajan sampeyan nambahake a byte
lan byte
, sampeyan bakal entuk int
.
Ana sawetara alasan kanggo iki. Tuladha:
Kode | Katrangan |
---|---|
|
110 * 120 yaiku 13,200 , sing rada luwih gedhe tinimbang nilai maksimum jinis kasebut byte :127 |
|
110 + 120 punika 230 , kang uga rada luwih saka nilai maksimum jinis byte :127 |
Umumé, nalika nikelaké nomer 8-bit (1 bait) karo nomer 8-bit (1 bait), kita entuk nomer sing manggoni 16-bit bit (2 bait).
Akibaté, kabeh operasi karo jinis integer sing luwih cilik saka int
tansah langsung diowahi kanggo int
s. Lan tegese yen sampeyan pengin nyimpen asil pitungan ing variabel jinis sing luwih cilik tinimbang int
, mula sampeyan kudu nemtokake operator typecast kanthi tegas.
Tuladha:
Kode | Katrangan |
---|---|
|
Ekspresi kasebut byte * byte bakal dadiint |
|
Ekspresi kasebut byte + byte bakal dadiint |
|
Ungkapan kasebut byte + int bakal dadi int tembung sing harfiah yaiku int . |
5. Nuansa penting
Operator typecast nduweni prioritas sing cukup dhuwur.
Tegese yen ekspresi ngemot, contone, tambahan lan operator typecast, typecast bakal dileksanakake sadurunge tambahan.
Tuladha:
Kode | Katrangan |
---|---|
|
Operator typecast mung bakal ditrapake kanggo a variabel, sing wis dadi byte . Kode iki ora bakal kompilasi. |
|
Iki cara sing bener. |
Yen sampeyan pengin ngowahi kabeh ekspresi menyang jinis tartamtu, lan ora mung siji komponen saka ekspresi, banjur bungkus kabeh ekspresi ing kurung lan sijine operator typecast ing ngarep.
GO TO FULL VERSION