SADECE dizem anlamlı bir değere sahipse bazı eylemler gerçekleştirmek istiyorum. Bu yüzden şunu denedim.
if (!myString.equals("")) {
doSomething
}
ve bu
if (!myString.equals(null)) {
doSomething
}
ve bu
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
ve bu
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
ve bu
if ( myString.length()>0) {
doSomething
}
Ve her durumda programım, dizemin BOŞ OLDUĞU gerçeğine rağmen bir şey
yapıyor. Bu null
a eşittir. Peki, bunun nesi yanlış?
EKLENDİ:
Sorunun nedenini buldum. Değişken bir string olarak bildirilmişti ve sonuç olarak bu değişkene atanan null
, "null"
! Yani, if (!myString.equals("null"))
çalışıyor.
if (myString != null && !myString.isEmpty()) {
// doSomething
}
Ek bir yorum olarak, "eşitler" sözleşmesindeki bu terimin farkında olmalısınız:
From Object.equals(Object)
:
gt;Null olmayan herhangi bir x
referans değeri için, x.equals(null)
'false' döndürmelidir.
nullile karşılaştırmanın yolu
x == nullve
x != null` kullanmaktır.
Ayrıca, x == null
ise x.field
ve x.method()
NullPointerException
atar.