1. Variabel referensi
Ing basa Jawa, ana rong jinis variabel: variabel primitif lan liyane. Kaya sing kedadeyan, saiki kita bakal ngomong babagan "kabeh liyane".
Nyatane, luwih bener yen ana variabel primitif lan variabel referensi . Dadi apa variabel referensi kasebut?
Ora kaya jinis primitif, sing variabel nyimpen nilai langsung, variabel referensi nyimpen referensi kanggo obyek. Sing, ana obyek nang endi wae ing memori, lan variabel referensi mung nyimpen alamat obyek iki ing memori (referensi kanggo obyek).
Mung jinis primitif nyimpen nilai langsung ing variabel. Kabeh jinis liyane mung nyimpen referensi obyek . Miturut cara, sampeyan wis nemoni rong jinis variabel kasebut - String
variabel lan variabel array .
Loro-lorone array lan senar minangka obyek sing disimpen ing memori. String
variabel lan variabel array mung nyimpen referensi kanggo obyek.
int a, int b and double d
variabel primitif sing nyimpen nilai ing dhewe.
Variabel String str
minangka referensi lan nyimpen alamat (referensi) menyang String
obyek ing memori.
Nalika nemtokake nilai primitif menyang variabel saka jinis primitif, nilai kasebut disalin (duplikat). Nalika nemtokake variabel referensi, mung alamat obyek sing disalin — obyek dhewe ora disalin .
2. Apa sing dimaksud referensi?
Apa bedane dhasar antarane variabel referensi lan variabel primitif?
Variabel primitif kaya kothak: sampeyan bisa nyimpen sawetara nilai ing kono. Variabel referensi luwih kaya selembar kertas kanthi nomer telpon.
Mobil vs kunci mobil
Mbayangno sampeyan arep menehi kanca mobil kanggo ulang tahun. Sampeyan ora bakal mbungkus ing kothak lan nggawa karo sampeyan: mobil gedhe banget kanggo sing.
Luwih trep kanggo nampilake mung kunci mobil ing kothak sing cukup gedhe kanggo ngemot. Kanca bakal ngerti kabeh nalika dheweke entuk kunci metu saka kothak. Ora perlu nggawa kabeh mobil nalika sampeyan mung bisa ngulungake kunci.
A wong vs dheweke nomer telpon
Utawa iki perbandingan liyane: wong lan nomer telpon. Nomer telpon dudu wong kasebut, nanging nomer telpon bisa digunakake kanggo nelpon dheweke, takon sawetara informasi, utawa menehi instruksi.
Kajaba iku, referensi digunakake kanggo sesambungan karo obyek. Kabeh obyek sesambungan karo siji liyane nggunakake referensi. Tinimbang "ijol-ijolan wong", kita mung ngganti nomer telpon.
Nalika menehi nilai menyang variabel primitif, nilai kasebut disalin (duplikat). Nalika menehi nilai menyang variabel referensi, mung alamat (nomer telpon) obyek sing disalin - obyek kasebut ora disalin.
A referensi nawakake siji liyane kauntungan: sampeyan bisa pass referensi obyek kanggo sawetara cara, lan cara bakal bisa kanggo ngowahi (ngganti) obyek kanthi nggunakake referensi kanggo iku, nelpon cara lan ngakses data nang obyek.
3. Nemtokake referensi
Nalika nemtokake variabel referensi, mung alamat obyek ing memori diutus. Obyek dhewe ora katon utawa ilang.
Pendekatan iki ngindhari nyalin memori sing akeh. Yen sampeyan perlu kanggo pass obyek gedhe banget kanggo cara, kita mung pass referensi obyek lan sing. Referensi njupuk akeh kurang papan.
Ukuran kabeh variabel referensi (preduli saka jinise) padha - 4 bita (kaya int). Nanging! Yen aplikasi sampeyan mlaku ing mesin Java 64-bit, kabeh referensi bakal ukurane 8 bita (64 bit).
Apa maneh, referensi mung bisa diutus kanggo saben liyane. Sampeyan ora bisa ngganti referensi utawa menehi nilai arbitrer menyang variabel referensi:
Kode | Katrangan |
---|---|
|
Iki diijini |
|
Nanging iki ora diijini |
|
Lan iki ora diijini |
4. null
Referensi
Lan apa nyimpen variabel referensi yen ora ana sing ditugasake?
Iku nyimpen referensi null . null
yaiku tembung kunci Jawa khusus sing tegese ora ana referensi (referensi kosong). Nilai kasebut null
bisa ditugasake menyang variabel referensi apa wae.
Kabeh variabel referensi null
kajaba padha duwe sawetara jinis referensi diutus.
Tuladha:
Kode | Katrangan |
---|---|
|
Variabel kasebut String name nduweni nilai standar: null . Variabel kasebut int age nduweni nilai standar: 0 . |
Variabel lokal sing durung diwenehi nilai dianggep ora diinisialisasi kanggo jinis primitif lan referensi.
Yen variabel nyimpen referensi kanggo sawetara obyek, lan sampeyan pengin mbusak nilai variabel, banjur mung nemtokake referensi null.
Kode | Katrangan |
---|---|
|
s toko null . s nyimpen referensi menyang s toko obyek senar null . |
5. Maringaken referensi kanggo cara
Yen metode nduweni paramèter sing minangka jinis referensi , banjur nilai kasebut diterusake menyang metode kanthi cara sing padha nalika nggarap variabel non-referensi. Parameter kasebut mung diwenehi nilai variabel liyane.
Tuladha:
Kode | Katrangan |
---|---|
|
Ing fill ngisi larik liwati ( array ) karo nilai liwati ( value ). |
Nalika fill
metode kasebut diarani, array
paramèter kasebut minangka referensi kanggo data
array. Variabel kasebut value
diwenehi referensi kanggo obyek senar ("Hello").
Iki kaya memori sadurunge nelpon fill
metode kasebut:
Iki kaya memori nalika fill
metode kasebut mlaku :
Variabel data
lan array
nuduhake (nyimpen referensi kanggo) wadhah sing padha ing memori.
Variabel value
nyimpen referensi kanggo obyek senar ( "Hello"
).
Sel-sel array uga mung nyimpen referensi kanggo "Hello"
obyek kasebut.
Nyatane, ora ana obyek sing diduplikasi - mung referensi sing disalin.
6. Perbandingan karo basa C/C ++
Ing wawancara, kadang programer Jawa ditakoni kepiye data dikirim menyang metode ing Jawa? Lan kadhangkala pitakonan apa data dilewati kanthi referensi utawa kanthi nilai?
Pitakonan iki asalé saka C ++, nanging ora banget migunani ing Jawa . Ing Jawa, paramèter tansah diwenehi nilai-nilai argumen. Dadi jawaban sing bener yaiku " dening nilai ".
Nanging disiapake kanggo nerangake posisi sampeyan , amarga sampeyan bisa langsung krungu retort: "jinis primitif liwati dening nilai, lan jinis referensi sing liwati dening referensi."
Iki asal saka Jeksa Agung bisa ngetokake iki Asal-Usul saka kasunyatan sing akeh programer Jawa padha C++ programer ing sasi. Ing basa pamrograman kasebut, pitakonan babagan cara paramèter dikirim menyang metode kasebut penting banget.
Ing Jawa, kabeh ora jelas: jinis primitif nyimpen nilai lan jinis referensi uga nyimpen nilai - referensi. Iku pitakonan apa variabel dianggep minangka nilai .
Ing C ++, variabel bisa nyimpen referensi kanggo obyek lan obyek kasebut dhewe. Semono uga babagan jinis primitif: variabel primitif bisa nyimpen nilai utawa nyatakake variabel kasebut minangka referensi menyang int
. Dadi, supaya ora kebingungan, programer C ++ tansah ngrujuk obyek kasebut minangka referensi minangka referensi , lan obyek kasebut dhewe - minangka nilai.
Ing C ++, sampeyan bisa kanthi gampang duwe kahanan ing ngendi siji variabel ngemot obyek, nanging liyane ngemot referensi kanggo obyek kasebut. Mulane, pitakonan babagan apa sing disimpen variabel - obyek kasebut dhewe utawa mung referensi - penting banget. Nalika obyek ditransfer menyang metode, disalin (yen dilewati kanthi nilai), lan ora disalin (yen dilewati kanthi referensi).
Ing Jawa, dualitas iki ora ana, mula jawaban sing bener yaiku: argumen diterusake menyang metode Jawa kanthi nilai . Mung yen kita ngomong babagan variabel referensi, nilai iki minangka referensi.
GO TO FULL VERSION