为什么新的String("a")== new String("a")给出false而"a"=="a"给出true.为什么看起来它们在后来的情况下都被视为同一个实例?

Whi*_*cal 0 java string pointers equals

可能重复:
等于和= = 字符串比较和Java中的字符串实习之间的差异

这次是一个不言自明的问题.

编辑:我理解==不等于.我不理解的是为什么"a"=="a"中的一个都被分配或视为同一个对象实例(它们是).

编辑一些人阅读问题或者只是按下关闭按钮?它与上述任何一个都没有关系.告诉我,我在哪里提到等于方法.....

kos*_*osa 13

"a" == "a"给出true,因为"a"将被视为字符串文字和汇集.因此,两个"a"都指向同一个实例,因为两个引用都指向同一个对象,==返回true.

当你说new String("a").全新的对象将在Heap和不同的引用上创建,所以==返回false,您需要使用.equals().

  • 还没有人真正说过这一点,而且它是相关的:在这个池中找到的字符串文字值也称为"内部值"或"内部值",它可以通过String.intern方法获得; `(new String("a").intern())=="a";`使用intern值的许多情况允许你使用`==`而不是`equals`来提高性能,但绝对是**必须**确保所有值都是内在的. (3认同)
  • 对于它的价值,构造函数参数也将等于其他文字 - 它是导致区分发生的新对象的构造. (2认同)