Почему == возвращает true? - PullRequest
       22

Почему == возвращает true?

0 голосов
/ 19 февраля 2012

Почему это условие возвращает true, как мы знаем == возвращает true, если обе переменные имеют одинаковую ссылку, но здесь ссылка не одинаковая, но все же она входит в цикл и печатает Hello World.

String var1="hi";
String var2="hi";

if(var1==var2){
    System.out.println("Hello World");
}

Ответы [ 6 ]

12 голосов
/ 19 февраля 2012

Поскольку у Java есть пул уникальных интернированных экземпляров и что строковые литералы хранятся в этом пуле.Это означает, что первый строковый литерал hi является точно таким же объектом String, что и второй литерал hi.

4 голосов
/ 19 февраля 2012

Когда вы присваиваете строковые литералы переменным, вы, вероятно, получите ссылку на тот же объект, поскольку строки кэшируются и являются неизменяемыми, поэтому эти строки на самом деле имеют одну и ту же ссылку.

2 голосов
/ 19 февраля 2012

Когда вы присваиваете строковый литерал для строки, этот литерал сохраняется как экземпляр строки в памяти.Дальнейшие присвоения того же литерала будут указывать на ту же ячейку памяти.Так что если var1 и var2 были объявлены типа String, то var1 == var2 вернет true, поскольку они указывают на один и тот же экземпляр String "hi".

0 голосов
/ 19 февраля 2012

Это происходит из-за этого http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5 Большинство ответов здесь уже указали вам правильное направление, но лучше прочитать источник истины.

0 голосов
/ 19 февраля 2012

См. Спецификация jvm .

Строковые литералы или, в более общем смысле, строки, являющиеся значениями константных выражений (§15.28), являются "интернированными" такделиться уникальными экземплярами, используя метод String.intern.

0 голосов
/ 19 февраля 2012

Вы объявили var1 и var2 как int вместо String.

Мой компилятор отказывается компилировать код, говоря "несовместимые типы".

Ваш компилятор, вероятно, приводит строку "hi"в некоторое число, например 0, потому что переменные должны иметь числовые значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...