Java pytanie rekrutacyjne: Kolejność wykonywania operatorów

Kolejność wykonywania operatorów

Jaki będzie rezultat działania poniższego programu?

package org.blog;

public class Main {

    public static void minLengthString(String s) {
        if (s != null && s.length() > 3) {
            System.out.println("Napis ma więcej niż 3 znaki.");
        }
    }

    public static void main(String[] args) {
        String strValue = null;
        minLengthString(strValue);
    }
}
  1. Zostanie rzucony wyjątek NullPointerException,
  2. Wyświetli się komunikat: „Napis ma więcej niż 3 znaki.”,
  3. Program wykona się bez widocznego efektu,
  4. Program się nie skompiluje, ponieważ zmienna strValue jest niepoprawnie zainicjalizowana.

Uwaga! Poniżej znajduje się odpowiedź na pytanie!

 

 

 

 

 

 

 

 

 

 

 

Odpowiedź

Prawidłowa odpowiedź na pytanie to odpowiedź numer 3 – program wykona się bez widocznego efektu.

Pierwsza odpowiedź jest błędna, ponieważ sprawdzanie warunku w Javie zaczyna się od lewej strony. W przypadku, gdybyśmy mieli taki kod:

public static void minLengthStringSecond(String s) {
    if (s.length() > 3 && s != null) {
        System.out.println("Napis ma więcej niż 3 znaki.");
    }
}

To niestety otrzymamy wyjątek NullPointerException.

Ze względu, że warunek w metodzie jest niespełniony to i druga odpowiedź jest nieprawidłowa. Czwarta odpowiedź jest nieprawidłowa, ponieważ każdy obiekt może być zainicjalizowany nullem.