"", boş da olsa gerçek bir dizedir.
null ise, String değişkeninin hiçbir şeye işaret etmediği anlamına gelir.
a==b
"" ve null bellekte aynı alanı işgal etmediği için yanlış döndürür - başka bir deyişle, değişkenleri aynı nesnelere işaret etmez.
a.equals(b)
"", null değerine eşit olmadığı için yanlış döndürür.
Aradaki fark, "" gerçek bir dize olduğundan, üzerindeki yöntemleri veya işlevleri şu şekilde çağırabilirsiniz:
a.length()
a.substring(0, 1)
ve bunun gibi.
Dize, b gibi null değerine eşitse, NullPointerException
çağırmayı denerseniz Java bir atar :
b.length()
Merak ettiğiniz fark == veya eşittir ise, bu şudur:
== referansları karşılaştırır, tıpkı gittim gibi
String a = new String("");
String b = new String("");
System.out.println(a==b);
İki farklı nesne tahsis ettiğim için yanlış çıktı ve a ve b farklı nesnelere işaret ettim.
Ancak, a.equals(b)
bu durumda equals
true değerini döndürür , çünkü Dizeler için yalnızca ve yalnızca String değişkeni boş değilse ve aynı karakter sırasını temsil ediyorsa true değerini döndürür .
Bununla birlikte, Java'nın Dizeler için özel bir durumu olduğu konusunda uyarılmalıdır.
String a = "abc";
String b = "abc";
System.out.println(a==b);
Çıktının false
iki farklı Dize ayırması gerektiği için olacağını düşünürdünüz . Aslında, Java sabit dizeleri staj yapar (örneğimizde a ve b gibi başlatılanlar). Bu yüzden dikkatli olun, çünkü bu == 'ın nasıl çalıştığı hakkında bazı yanlış pozitifler verebilir.
b.equals(a)
- ancak==
başka yollarla "işe yaramaz" olarak karşılaştırmak için kullanmayın .null
(Boş bir dize farklıdır değeri""
, geçerli bir String örneği) olabilir asla bunun üzerine çağrılan bir yöntem var. Eşitliğin sol tarafına "bilinen null olmayan" (genellikle sabit bir değer veya değişmez) yerleştirmek "Yoda koşullu" ya da bazılarına benzer.