Miałem taki oto kod w Javie:
void funkcja() {
String S;
....
.... // dużo kodu działającego na S
....
if (S == null) {
zrobCos();
return;
}
zrobCosInnego(S);
}
Po uruchomieniu wywalało mniej więcej taki wyjątek:
NullPointerException
at zrobCosInnego:980
at funkcja:930
Dopałem kod debugujący, bo pomyślałem, że coś nie tak ze zmienną S:
void funkcja() {
....
System.out.println("S = ", S);
if (S == null) {
zrobCos();
return;
}
zrobCosInnego(S);
}
Rezultat:
S = null
NullPointerException
at zrobCosInnego:980
at funkcja:930
Zaraz, ale czemu on nie wchodzi w warunek? Java się popsuła czy co?
Kolejne debugi:
void funkcja() {
....
System.out.println("S = ", S);
if (S == null) {
System.out.println("Jestem wewnatrz IF");
zrobCos();
return;
}
System.out.println("Jestem za IF");
zrobCosInnego(S);
}
Rezultat:
S = null
Jestem za IF
NullPointerException
at zrobCosInnego: JakasKlasa.java:980
at funkcja: JakasKlasa.java:930
Koledzy popatrzyli i pokiwali głowami, że czegoś takiego nie widzieli.
Na innej JVM podobny efekt. Po dwóch godzinach dochodznia okazało się, że feralna zmienna S zawierała łańcuch znaków "null".