1. Perbandingan
Pemrogram perlu membandingkan variabel yang berbeda satu sama lain sepanjang waktu. Tapi, seperti yang telah Anda lihat, semuanya tidak sesederhana itu.
Bilangan bulat sangat mudah untuk dibandingkan — Anda cukup menggunakan ==
dan selesai. Untuk membandingkan bilangan real , Anda harus membandingkan selisihnya (atau lebih tepatnya, nilai absolut selisihnya) dengan sejumlah angka yang sangat kecil.
Membandingkan string bahkan lebih sulit. Di atas segalanya, ini karena string adalah objek. Terlebih lagi, programmer sering menginginkan perbandingan string berjalan sedikit berbeda tergantung pada situasinya.
2. Bagaimana string disusun memori
Seperti yang telah Anda lihat, string disimpan dalam memori berbeda dari bilangan bulat dan bilangan real:
Dua blok memori digunakan untuk menyimpan string: satu blok menyimpan teks itu sendiri (ukurannya bergantung pada ukuran teks) sedangkan blok kedua (4 byte) menyimpan alamat blok pertama.
Meskipun programmer berpengalaman akan mengatakan sesuatu seperti " String
str
variabel menyimpan referensi ke suatu String
objek.
3. Menetapkan referensi ke string
Manfaat dari pendekatan ini menjadi jelas ketika Anda perlu menetapkan satu variabel string ke variabel string lainnya. Contoh:
String text = "This is a very important message";
String message = text;
Dan inilah yang akan berisi memori sebagai hasilnya:

Setelah jenis operasi penugasan ini, String
objek tetap berada di tempatnya, dan hanya alamatnya (referensi ke objek) yang disalin ke dalam message
variabel.
4. Bekerja dengan referensi dan objek
Tetapi jika Anda memutuskan untuk mengonversi string menjadi huruf besar (huruf besar), mesin Java melakukan segalanya dengan benar: Anda akan mendapatkan dua String
objek, dan variabel text
and message
akan menyimpan referensi, masing-masing ke objeknya sendiri.
Contoh:
String text = "This is a very important message";
String message = text.toUpperCase();
Dan inilah yang akan berisi memori sebagai hasilnya:
Harap perhatikan bahwa toUpperCase()
metode ini tidak mengubah string yang dipanggil. Sebaliknya, itu membuat string baru (objek baru) dan mengembalikan referensi ke sana.
Bagaimana dengan contoh yang lebih menarik. Katakanlah Anda memutuskan untuk meneruskan string ke Scanner
objek (sehingga objek membaca nilai dari string).
Contoh:
String text = "10 20 40 80";
Scanner console = new Scanner(text);
int a = console.nextInt();
int b = console.nextInt();
Anda dapat mempelajari lebih lanjut tentang cara Scanner
kerja kelas di sini .
Ini adalah bagaimana semuanya akan disimpan dalam memori:
Dalam hal ini, satu String
objek tetap berada di memori seperti sebelumnya — hanya referensi untuk itu yang diteruskan dan disimpan dalam variabel.
5. Membandingkan referensi ke String
objek
Dan akhirnya, kita telah mencapai bagian yang menyenangkan: perbandingan string.
Ada dua operator yang dapat Anda gunakan untuk membandingkan variabel string: ==
(sama) dan !=
(tidak sama). Anda tidak dapat menggunakan operator "lebih besar dari", "kurang dari", atau "lebih besar dari atau sama dengan" — compiler tidak akan mengizinkannya.
Tapi ada nuansa yang menarik di sini: apa yang sebenarnya disimpan dalam variabel string? Itu benar: alamat (referensi) ke objek. Dan alamat inilah yang akan dibandingkan:
String text = "Hi";
String message = text;
String s1 = text.toUpperCase();
String s2 = text.toUpperCase();
Inilah yang akan ada di memori:
Variabel message
and text
merujuk ke (menyimpan alamat) objek yang sama. Tetapi variabel s1
and s2
menyimpan referensi ke objek yang sangat mirip tetapi berbeda.
Dan jika Anda membandingkan 4 variabel ini dalam kode, maka Anda akan mendapatkan hasil sebagai berikut:
Kode | Keluaran konsol |
---|---|
|
|
GO TO FULL VERSION