Rozwiązanie
Zmienne imie jest inicjowane w deklaracji, gdyż inaczej może nie mieć ustalonej wartości (gdy pierwsza część warunku if jest niespełniona tzn. użytkownik zamknął dialog z pytaniem o nazwisko np. wciskając Cancel). Ponieważ zmienna jest lokalna, to brak gwarancji ustalenia jej wartości (jeżeli w ogóle jest używana po deklaracji) - spowoduje błąd kompilacji. Zmienne nazwisko i txt - zawsze uzyskują wartości w trakcie działania programu.
Wyrażenie
(nazwisko = JOptionPane.showInputDialog("Podaj nazwisko")) != null
jest opracowywane w następujący sposób:
wywoływana jest metoda showInputDialog; zwrócony wynik
podstawiany jest na zmienną nazwisko, a wartość wyrażenia
przypisania (którą jest wartość zmiennej nazwisko)
porównywana jest z wartością null.
Efektem opracowania wyrażenia, jest uwidocznienie dialogu, przypisanie zmiennej nazwisko wartości oraz obliczenie wyniku porównania. Wynikiem wyrażenia jest true jeśli zmienna nazwisko (po podstawieniu na nią wartości zwróconej przez showInputDialog) nie jest równa null i false w przeciwnym razie.
Nawiasy są konieczne, bo priorytet operatora = jest niższy od priorytetu operatora !=.