На данный вопрос уже ответили:
String a1 = "abc";
String a2 = "abc";
String str1 = new String("abc");
String str2 = new String("abc");
Почему при сравнении (a1 == a2) результат true, хотя они является объектами и у них разные ссылки, т.е и результат должен быть false. В чём отличие (a1 == a2) и (str1 == str2)?
Потому, что на этапе компиляции для одинаковых литералов будет создан только один объект строки.
public class Main {
public static void main(String[] args) {
String a1 = "abc";
String a2 = "abc";
}
}
Компилируем
$ javac Main.java
смотрим в байткод
$ javap -c Main
и видим
0: ldc #2 // String abc
2: astore_1
3: ldc #2 // String abc
5: astore_2
6: return
что и для a1
и для a2
ссылка в пул констант одна - #2
Строки созданные на момент компиляции указывают на один и тот же экземляр, поэтому a1 и a2 - одинаковы. Компилятор создает коллекцию -пул строк, и для созданных на момент компиляции как бы вызыается метод intern().
Для второй пары строк истиной будет str1.intern() == str2.intern()
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Здравствуйте, давно читаю разные туториалы и много где встречаю должно быть мало зависимостей, как я понял это все достигается при помощи...
Добрый деньЯ пишу приложение с графическим интерфейсом используя Swing
Всем приветТакой вопрос, как отключить локализацию текстов в UI подключаемой библиотеки? Использую Zendesk Support SDK for Android и пытаюсь сделать так...
Добрый деньЕсть ListView в котором два TextView у каждого из которых свой тег