Meskipun pertanyaan tentang string Java "==" dan "sama dengan" adalah pertanyaan paling mendasar dalam pembelajaran Java, masih banyak siswa yang baru mempelajari Java yang belum memahami prinsip-prinsipnya. , jadi saya menulis artikel untuk berbagi dengan Anda pemahaman saya sendiri.
Pertama mari kita lihat contohnya:
Copy kode kodenya sebagai berikut:
kelas publik TestStringEquals {
public static void main(String[] args) {
String a = "tes";
String b = "ujian";
String c = String baru("ujian");
String d = String baru("ujian");
Tali e = a;
String f = String baru(a);
Tali g = a + "";
System.out.println(a == b ? "ekspresi /"a==b/" benar"
: "ekspresi /"a==b/" salah");
System.out.println(a == c ? "ekspresi /"a==c/" benar"
: "ekspresi /"a==c/" salah");
System.out.println(c == d ? "ekspresi /"c==d/" benar"
: "ekspresi /"c==d/" salah");
System.out.println(a == e ? "ekspresi /"a==e/" benar"
: "ekspresi /"a==e/" salah");
System.out.println(a == f ? "ekspresi /"a==f/" benar"
: "ekspresi /"a==f/" salah");
System.out.println(a == g ? "ekspresi /"a==g/" benar"
: "ekspresi /"a==g/" salah");
if (a.sama dengan(b) && b.sama dengan(c) && c.sama dengan(d) && d.sama dengan(e)
&& e.sama dengan(f) && f.sama dengan(g)) {
Sistem.keluar
.println("a sama dengan b sama dengan c sama dengan d sama dengan e sama dengan f sama dengan g");
}
}
}
Jika Anda belum memiliki jawabannya, mari kita coba melakukannya. Bisakah Anda menjamin semuanya benar?
Jawabannya diumumkan di bawah ini:
Copy kode kodenya sebagai berikut:
ekspresi "a==b" benar
ekspresi "a==c" salah
ekspresi "c==d" salah
ekspresi "a==e" benar
ekspresi "a==f" salah
ekspresi "a==g" salah
<div style="text-align: left;"></div>a sama dengan b sama dengan c sama dengan d sama dengan e sama dengan f sama dengan g
Untuk memahami masalah seperti ini dengan baik, cara terbaik adalah memiliki pemahaman mendalam tentang mekanisme dan prinsip metode "==" dan metode "sama dengan" String di Java. Semua orang pasti tahu bahwa "sama dengan" adalah membandingkan isi string. Karena semua isi string pada program di atas adalah "ujian", maka semuanya akan sama jika dibandingkan dengan sama.
Namun tahukah Anda bahwa metode sama dengan dan metode "==" dari kelas dasar Object di Java sebenarnya sama? Hanya saja setelah kelas String mewarisi kelas Object (semua kelas di Java mewarisi kelas Object), ia membebani metode equal sehingga menjadi perbandingan isi string.
Setelah memahami dengan baik tentang persamaan, sekarang mari kita mempelajari seluk-beluk metode "==".
"==" adalah operator di Java. Konten yang dibandingkan adalah penunjuk dari dua objek, yang merupakan alamat objek sebenarnya. Jadi mudah untuk memahami bahwa e==a mengembalikan nilai true.
Mari kita lihat perbandingan antara c dan d lagi. Ketika kita melihat kata kunci baru, itu berarti c dan d telah mengajukan permohonan kembali untuk alamat memori, dan kemudian menetapkan nilai "test", jadi c==d mengembalikan false. Hal ini dapat dimengerti dengan cara yang sama
Operasi "==" antara a, c, d, dan f semuanya menghasilkan false.
Lalu mari kita lihat g= a + “”. Meskipun kita tidak melihat kata kunci baru, karena operator kelas String “+” kelebihan beban, String baru pasti akan ditambahkan dalam metode kelebihan beban, sehingga menjadi seperti di atas. situasi. Kemudian hal yang paling sulit untuk dipahami adalah perbandingan antara a dan b. Faktanya, ini adalah hasil optimasi dari kompiler Java. Kompiler Java memiliki tempat penyimpanan yang disebut kumpulan konstanta string. Setelah pernyataan dikompilasi, "test" akan disimpan dalam kumpulan konstanta string ini. Kemudian ketika b didefinisikan lagi, b masih menunjuk ke area ini, jadi a dan b masih menunjuk ke area yang sama. Jadi a==b mengembalikan nilai true.