2015-04-30 3 views
0

Я знаю, что в Java две строки обычно должны сравниваться с использованием метода .equals(), а использование == только сравнивает места памяти. Тем не менее, я написал этот тестовый код очень быстро в Eclipse, и он возвращает true, и никто, с которым я работаю, не может понять, почему. Было ли обновление Java для поддержки прямых сравнений строк, и никто не осознал или не сходил с ума? Переполнение стека не позволит мне опубликовать изображение консоли, но оно напечатает правду.Почему это сравнение строк работает?

Вот код:

public class Thing { 
     public static void main(String[] args){ 
      String ar = "fish"; 
      String ar2 = "fish"; 
      System.out.println(ar == ar2); 
     } 
    } 
+0

Компилятор, вероятно, видел оптимизацию. Нет причин хранить строковый литерал в два раза. Таким образом, они имеют одинаковую ссылку. – user489041

+0

Похоже, что компилятор может интернировать строку для вас –

+0

, потому что коммандер smart java не создает одну и ту же строку дважды. – dit

ответ

0

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

-3

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

+2

Неправильно. очень неправильно. просто попробуйте запустить приведенный выше код, но добавьте: String tester = new String («fish»); System.out.println (ar == tester); И вы увидите вашу ошибку. – Stultuske

+0

"* Строки хранятся в пуле строк *" только частично верно. Вы должны быть более точными, какие строки (потому что не все они), и предпочтительно, как они размещены там. – Pshemo

+0

Спасибо за отзыв, я не знал о различии. Просто получил хорошее объяснение по адресу http://stackoverflow.com/questions/2486191/java-string-pool –

Смежные вопросы