Каким будет результат компиляции и выполнения данного кода?

public class Sentence {
    public static void main(String[] args) {
        String str1 = "Zero";
        String str2 = "Zero";

        boolean b1;

        if (str1 == str2)
            b1 = true;
        else
            b1 = false;
        System.out.println(b1);

        String str3 = "Zero";
        String str4 = "Zero1";

        boolean b2;

        if (str3 == str4)
            b2 = true;
        else
            b2 = false;
        System.out.println(b2);
    }
}
Explanation
Объекты классов должны создаваться явно. В представленном вопросе, обьекты создаются неявно: String str1 = "Zero"; String str2 = "Zero"; приводит к присвоению второй ссылочной переменной, адреса, сохраненного в первой ссылочной переменной, из-за оптимизации кода компилятором. При вышеприведенном способе инициализации переменной, объект создается только один раз. Если есть другая переменная, с тем же способом присвоения и таким же набором символов(т.е. - "Zero"), строка будет использоваться совместно. А это значит, что str1==str2 = true(ссылка на одну и ту же область памяти). Однако, равенство обьектов подобным образом обычно не проверется. Содержимое объектов обычно проверяется с помощью метода equals()(например, str1.equals(str2)), который с этой целью переопределяется.

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты