Member 13539246 Ответов: 2

У меня есть следующий вопрос в java о концепции строк


Вот этот код::
String x="a";
    String xy=x+"b";
    String ab="ab";


Поскольку строки были назначены строковыми литералами и могут быть созданы в пуле строковых констант.
String x="a";  // "a" will be created in the constant pool referenced by x
    String xy=x+"b"; // this will be computed in Runtime and created in the constant pool with value as ab referenced by xy
    String ab="ab";  //this will be created in the constant pool referenced by ab


но при выполнении System.out.println(xy==ab) он возвращается как false.
Поскольку оба они("ab") создаются в пуле строковых констант, который, в свою очередь, должен возвращать true.Я что-нибудь упустил?

Что я уже пробовал:

я понимаю, что когда-либо строка должна быть создана, она должна пойти и сначала проверить пул констант строки, если он не существует, он создаст строку, иначе она даст ссылку на существующую строку.

2 Ответов

Рейтинг:
2

CPallini

Цитата:
Строка xy=x+"b"; // она будет вычислена во время выполнения и создана в пуле констант со значением ab, на которое ссылается xy
Вышеприведенное замечание неверно. Оператор конкатенации создает новый строковый объект.


Рейтинг:
1

Peter Leow

Цитата:
Примечание: класс String является неизменяемым, так что после его создания объект String не может быть изменен. Класс String имеет ряд методов, некоторые из которых будут рассмотрены ниже, которые, как представляется, изменяют строки. Поскольку строки являются неизменяемыми, то на самом деле эти методы создают и возвращают новую строку, содержащую результат операции.
-- Строки (Учебники Java™ )[^] => xy и ab-это два разных строковых объекта.
Следующий,
== проверяет равенство ссылок (указывает на один и тот же объект)[^] => ab==xy возвращает false.
Для проверки равенства значений перейдите к
.equals()


Afzaal Ahmad Zeeshan

5ед. Это и есть решение проблемы.