"" adalah string yang sebenarnya, meskipun yang kosong.
null, bagaimanapun, berarti bahwa variabel String menunjuk ke nol.
a==b
mengembalikan false karena "" dan null tidak menempati ruang yang sama dalam memori - dengan kata lain, variabel mereka tidak menunjuk ke objek yang sama.
a.equals(b)
mengembalikan false karena "" tidak sama dengan nol, jelas.
Perbedaannya adalah karena "" merupakan string yang sebenarnya, Anda masih dapat memanggil metode atau fungsi seperti itu
a.length()
a.substring(0, 1)
dan seterusnya.
Jika String sama dengan nol, seperti b, Java akan melempar NullPointerException
jika Anda mencoba memohon, katakan:
b.length()
Jika perbedaan yang Anda tanyakan adalah == versus sama, inilah ini:
== membandingkan referensi, seperti jika saya pergi
String a = new String("");
String b = new String("");
System.out.println(a==b);
Itu akan menghasilkan false karena saya mengalokasikan dua objek yang berbeda, dan a dan b menunjuk ke objek yang berbeda.
Namun, a.equals(b)
dalam hal ini akan mengembalikan true, karena equals
untuk Strings akan mengembalikan true jika dan hanya jika argumen String tidak nol dan mewakili urutan karakter yang sama.
Namun, berhati-hatilah bahwa Jawa memiliki kasus khusus untuk Strings.
String a = "abc";
String b = "abc";
System.out.println(a==b);
Anda akan berpikir bahwa outputnya adalah false
, karena seharusnya mengalokasikan dua String yang berbeda. Sebenarnya, Java akan menginternir String literal (yang diinisialisasi seperti a dan b dalam contoh kita). Jadi hati-hati, karena itu bisa memberikan beberapa kesalahan positif tentang cara kerja ==.
b.equals(a)
- tetapi jangan gunakan==
untuk membandingkan string karena "tidak akan berfungsi" dengan cara lain. Thenull
value (yang berbeda dari string kosong""
, contoh String valid) dapat tidak pernah memiliki metode dipanggil atasnya. Menempatkan "dikenal non-null" (biasanya nilai konstan atau literal) ke sisi kiri kesetaraan adalah "Yoda conditional" atau semacamnya.