Что произойдет в результате компиляции и выполнения программы:

public class Main {    
    public static void main(String[] args) {
        String strA = "text";
        String strB = "text";
        strA += "1";
        strB += "1";
        System.out.println(strA != strB);
        strA = "text1";
        strB = "text1";
        System.out.println(strA != strB);
    }
}
Explanation
Во-первых, нужно помнить, что строковые литералы в Java - это, фактически, объекты (String). При этом, если в программе несколько раз встречается один и тот же строковый литерал, то ему будет соответствовать один и тот же объект. Поэтому во втором случае strA == strB (и, соответственно, выводится false).

Во-вторых, нужно помнить, что строки (String) в Java - это неизменяемые объекты. Поэтому, когда к объекту strA "приклеивается" другая строка (strA += "1"), на самом деле создаётся новый объект, содержащий "text1". И когда приклеиваем к объекту strB - создаётся ещё один (другой!) объект, также содержащий "text1". Следовательно, strA != strB, и в первом случае выводится true.

Фактически, команда strA += "1" разворачивается в strA = new StringBuilder().append(strA).append("1").toString(); И если это выполнится два раза, то получится два разных объекта, пусть и с одинаковым содержимым.

Следи за CodeGalaxy

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

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