Temat: Porównanie Stringów
Trochę schodzimy na offtop, ale taka konstrukcja wcale nie jest najlepszym sposobem na pozbycie się NPE. Jeśli używamy tego w wewnętrznej logice to sami prosimy się o problemy.
Dla przykładu logika napisana w taki sposób:
if ("NORMAL".equals(status)) {
// dla statusu normalnego coś robimy
}
Na pierwszy rzut oka wygląda zwięźle i prosto. Zwykłe testy też przejdą bez zająknięcia. Problem w tym że ta logika jest dziurawa i taki kod wcześniej, czy później wbije nam nóż w plecy.
Hipotetyczna sytuacja - ktoś rozbudowuje ORM aplikacji i popełnia błąd w mapowaniu kolumn. String "status" staje się nullem, a nasza funkcja beztrosko go przetwarza, propagując błąd dalej. Bez solidnego teamu testerskiego taki bug może z powodzeniem wejść na produkcję, a my po tygodniu budzimy się z krytycznym błędem i tysiącem uszkodzonych obiektów, a log błędów... jest całkowicie czysty. Takie zachowanie aplikacji to Mad Girlfriend Bug:
http://www.codinghorror.com/blog/2012/07/new-programmi...
Jeśli funkcja jest zapisana bez użycia tej konstrukcji to developer dostaje NPE, poprawia to w 10 min, a problem nie wychodzi poza komputer programisty. Taki styl pisania jest promowany w całym JDK, dostarczając w wymaganym parametrze null do funkcji zwykle dostajemy NPE. Sun nie pisał tego z potrzeby bycia złośliwym, tylko tak po prostu szybciej wykrywa się błędy.
http://en.wikipedia.org/wiki/Fail-fast
Podsumowując, moim zdaniem można tego użyć jako skrót w walidacji niepewnego wejścia(np. input użytkownika), ale nigdy jako "rekomendowany" sposób porównywania stringów.