1. Bandhingan

Programer kudu mbandhingake variabel sing beda karo saben liyane. Nanging, kaya sing wis sampeyan deleng, kabeh ora gampang banget.

Integer gampang banget kanggo mbandhingake - sampeyan mung nggunakake ==lan wis rampung. Kanggo mbandhingaké nomer nyata , sampeyan kudu mbandhingaké prabédan sing (utawa rodo, Nilai Absolute saka prabédan) karo sawetara nomer cilik.

Mbandhingake senar malah luwih angel. Sing paling penting, iki amarga senar minangka obyek. Apa maneh, programer kerep pengin mbandhingake string dadi beda-beda gumantung saka kahanan.


2. Carane strings sing disusun memori

Kaya sing wis sampeyan deleng, senar disimpen ing memori kanthi beda tinimbang integer lan nomer nyata:

Carane strings disusun memori

Rong blok memori digunakake kanggo nyimpen senar: siji blok nyimpen teks dhewe (ukurane gumantung saka ukuran teks) nalika blok kapindho (4 bita) nyimpen alamat blok pertama.

Sanajan programmer sing berpengalaman bakal ngomong kaya " String strvariabel nyimpen referensi menyang Stringobyek.


3. Nemtokake referensi kanggo senar

Keuntungan saka pendekatan iki katon nalika sampeyan kudu nemtokake variabel string menyang variabel string liyane. Tuladha:

String text = "This is a very important message";
String message = text;

Lan iki minangka akibat saka memori:

Nemtokake referensi kanggo senar

Sawise operasi assignment jinis iki, Stringobyek tetep ing ngendi, lan mung alamat (referensi kanggo obyek) disalin menyang variabel message.


4. Nggarap referensi lan obyek

Nanging yen sampeyan mutusake kanggo ngowahi senar menyang huruf gedhe (huruf kapital), mesin Java nindakake kabeh kanthi bener: sampeyan bakal entuk rong Stringobyek, lan variabel textlan messagebakal nyimpen referensi, saben obyek dhewe.

Tuladha:

String text = "This is a very important message";
String message = text.toUpperCase(); 

Lan iki minangka akibat saka memori:

Nggarap referensi lan obyek

Wigati dimangerteni manawa toUpperCase()metode kasebut ora ngganti senar sing diarani. Nanging, nggawe senar anyar (obyek anyar) lan ngasilake referensi kasebut.

Kepiye conto sing luwih menarik. Contone, sampeyan mutusake ngirim senar menyang Scannerobyek (supaya bisa maca nilai saka senar).

Tuladha:

String text = "10 20 40 80";
Scanner console = new Scanner(text);
int a = console.nextInt();
int b = console.nextInt();

Sampeyan bisa mangerteni sing luwih lengkap babagan carane Scannerkelas dianggo kene .

Iki carane kabeh bakal disimpen ing memori:

Nggarap referensi lan obyek.  Kelas Scanner

Ing kasus iki, obyek siji Stringtetep ana ing memori kaya saiki - mung referensi sing diwarisake lan disimpen ing variabel.


5. Mbandhingake referensi kanggo Stringobyek

Lan pungkasane, kita wis tekan bagian sing nyenengake: perbandingan string.

Ana rong operator sing bisa digunakake kanggo mbandhingake variabel senar: ==(padha) lan !=(ora padha). Sampeyan ora bisa nggunakake operator "luwih saka", "kurang saka", utawa "luwih gedhe saka utawa padha karo" - compiler ora ngidini.

Nanging ana nuansa sing menarik ing kene: apa sing bener disimpen ing variabel senar? Sing bener: alamat (referensi) kanggo obyek. Lan alamat iki sing bakal dibandhingake:

String text = "Hi";
String message = text;
String s1 = text.toUpperCase();
String s2 = text.toUpperCase(); 

Mangkene apa sing bakal ana ing memori:

Mbandhingake referensi kanggo obyek String

Variabel messagelan textnuduhake (nyimpen alamat) obyek sing padha. Nanging s1lan s2variabel nyimpen referensi kanggo obyek sing meh padha nanging béda.

Lan yen sampeyan mbandhingake 4 variabel kasebut ing kode kasebut, sampeyan bakal entuk asil ing ngisor iki:

Kode Output konsol
String text = "Hi";
String message = text;
String s1 = text.toUpperCase();
String s2 = text.toUpperCase();
System.out.println(text == message);
System.out.println(text == s1);
System.out.println(s1 == s2); 


true  // The addresses are equal
false // The addresses are different
false // The addresses are different