Θέλω να εκτελέσω κάποια ενέργεια ΜΟΝΟ ΑΝ η συμβολοσειρά μου έχει μια σημαντική τιμή. Έτσι, δοκίμασα αυτό.
if (!myString.equals("")) {
doSomething
}
και αυτό
if (!myString.equals(null)) {
doSomething
}
...και αυτό...
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
...και αυτό...
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
...και αυτό...
if ( myString.length()>0) {
doSomething
}
Και σε όλες τις περιπτώσεις το πρόγραμμά μου "κάνει κάτι" παρά το γεγονός ότι η συμβολοσειρά μου ΕΙΝΑΙ ΚΕΝΟ. Ισούται με "μηδέν". Οπότε, τι συμβαίνει με αυτό;
ΠΡΟΣΘΕΤΟ:
Βρήκα την αιτία του προβλήματος. Η μεταβλητή είχε δηλωθεί ως συμβολοσειρά και, κατά συνέπεια, το null
που ανατέθηκε σε αυτή τη μεταβλητή μετατράπηκε σε "null"
! Έτσι, το if (!myString.equals("null"))
λειτουργεί.
if (myString != null && !myString.isEmpty()) {
// doSomething
}
Ως περαιτέρω σχόλιο, θα πρέπει να γνωρίζετε αυτόν τον όρο στη σύμβαση "ίσα":
Για οποιαδήποτε μη-μηδενική τιμή αναφοράς
x
, ηx.equals(null)
θα πρέπει ναεπιστρέφει false
.
Ο τρόπος σύγκρισης με null
είναι να χρησιμοποιήσετε x == null
και x != null
.
Επιπλέον, τα x.field
και x.method()
ρίχνουν NullPointerException
αν x == null
.
Πρέπει να ελέγξετε ότι το αντικείμενο myString
είναι null
:
if (myString != null) {
doSomething
}