JavaRush /Blog Jawa /Random-JV /Paramèter passing ing Jawa
vincent_vega
tingkat
Gainesville

Paramèter passing ing Jawa

Diterbitake ing grup
Variabel ing Jawa minangka wadhah kanthi nilai. Dadi apa tegese "liwat" variabel? Lan apa bedane antarane jinis data primitif lan referensi.
Parameter passing ing Jawa - 1
Kita bakal ngerti mengko. Ayo diwiwiti kanthi tugas sing prasaja dhisik. Apa kode iki:
int х = 3;
int у = х;
Ing baris 1, variabel x saka jinis int digawe lan diwenehi nilai 3. Ing baris 2, variabel y jinis int digawe lan diwenehi nilai variabel x . Ing mangsa ngarep, variabel x ora mengaruhi y kanthi cara apa wae . Jawa nyalin nilai x (3) lan panggonan sing disalin menyang y . Iki ngliwati parameter kanthi nilai. Sampeyan ora nulis siji variabel menyang liyane. Nilai kasebut disalin lan ditugasake menyang variabel anyar. Ekspresi y = x; Ora ateges "tulis x kanggo y ". Iku tegese "nyalin nilai ing x lan nulis salinan kasebut menyang y ." Yen mengko aku ganti y :
у = 34;
Apa iki bakal mengaruhi x ? Mesthi ora. x isih nduweni nilai 3. Yen aku ngganti x mengko :
х = 90;
Kepiye carane iki mengaruhi y ? Ora ono. Dheweke ora ana hubungane kanthi cara apa wae sawise tugas digawe (NYALIN nilai). Kepiye babagan jinis referensi? Carane padha bisa? Ora angel, nyatane aturane padha. Tautan nindakake perkara sing padha - sampeyan entuk salinan link kasebut. Dadi yen aku ngomong:
Cat A = new Cat ();
Cat B = A;
Link A disalin menyang link B. Iki ora ditrapake kanggo obyek - sampeyan isih duwe siji obyek. Nanging saiki sampeyan duwe rong referensi beda sing ngontrol obyek Cat sing padha . Saiki ayo goleki paramèter kanggo metode. Jawa ngliwati paramèter kanthi nilai. tansah. Iki tegese "nyalin nilai lan pass salinan." Kanggo jinis primitif iku gampang:
int х = 5;
doStuff (х); / / Передать копию х (meaning 5) в метод doStuff
Cara doStuff katon kaya iki:
void doStuff (int у) {

   / / Действия с 'y'
}
Salinan nilai x , yaiku 5, diterusake menyang metode doStuff () . Metode doStuff() nduweni variabel dhewe sing diarani y . Variabel y minangka variabel anyar sing beda. Kanthi salinan apa sing ana ing x nalika ngliwati metode kasebut. Wiwit saiki, y lan x ora ana pengaruhe. Nalika sampeyan ngganti y , sampeyan ora mengaruhi x .
void doStuff (int у) {

   у = 27; / / Это не влияет на 'х'
}
Lan kosok balene - yen sampeyan ngganti x , sampeyan ora bakal ngganti y . Ing bab mung x ing kasus iki nyalin nilai lan pass menyang doStuff () cara . Kepiye cara kerja "pass by value" karo referensi? Akeh banget wong sing ngomong, "Jawa ngliwati jinis primitif miturut nilai lan obyek kanthi referensi." Iku ora apa padha ngomong. Jawa ngliwati kabeh kanthi nilai. Kanthi primitif, sampeyan entuk salinan konten kasebut. Kanthi pranala, sampeyan uga entuk salinan konten kasebut. Nanging apa isi link kasebut? Remot kontrol. Fasilitas kanggo ngatur / ngakses fasilitas. Nalika sampeyan pass referensi kanggo obyek kanggo cara, sampeyan maringaken salinan referensi. kloning remote control. Objek kasebut isih lungguh ing tumpukan sing digawe, ngenteni wong nggunakake remot kontrol. Fasilitas kasebut ora preduli pirang-pirang remot sing "diprogram" kanggo ngontrol. Mung wong sing peduli babagan iki yaiku tukang sampah lan sampeyan, programmer. Dadi nalika sampeyan ngomong:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   / / Использование B
}
Mung ana siji obyek Kucing . Nanging saiki rong remot kontrol (link) bisa ngakses obyek Cat sing padha . Dadi saiki apa wae sing ditindakake B marang obyek Kucing bakal mengaruhi Kucing sing ditunjuk dening A , nanging ora bakal mengaruhi isi A ! Sampeyan bisa ngganti Cat nggunakake link anyar B (disalin langsung saka A ), nanging sampeyan ora bisa ngganti A. Apa tegese iki? Sampeyan bisa ngganti obyek sing A nuduhake , nanging ora bisa ngganti referensi A - pangalihan menyang obyek liyane utawa null . Dadi, yen sampeyan ngganti referensi B (dudu obyek Cat nyata sing dirujuk B , nanging nilai referensi kasebut dhewe) sampeyan ora bakal ngganti nilai A. Lan kosok balene. Dadi:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   B = new Cat (); / / Не повлияет на ссылку A
}
Iku mung tegese B nuduhake obyek liyane. A isih seneng. Dadi baleni sawise aku: Jawa ngliwati kabeh kanthi regane. (Oke, sepisan maneh ... karo perasaan.) Jawa ngliwati kabeh kanthi nilai. Kanggo jinis primitif sampeyan pass salinan saka Nilai saiki, kanggo referensi obyek pass salinan referensi (remote kontrol). Sampeyan ora tau ngliwati obyek kasebut. Kabeh obyek disimpen ing tumpukan. tansah. Saiki gawe secangkir kopi sing akeh lan tulisen kode! Artikel asli .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION