【发布时间】:2015-04-30 13:47:45
【问题描述】:
我知道,在 Java 中,通常应该使用 .equals() 方法比较两个字符串,而使用 == 仅比较内存位置。但是,我在 Eclipse 中快速编写了这个测试代码,它返回了 true,我正在使用的任何人都无法弄清楚原因。 Java 是否更新以支持字符串的直接比较,只是没有人意识到还是我们疯了? Stack Overflow 不允许我发布控制台的图片,但它打印出来是真的。
代码如下:
public class Thing {
public static void main(String[] args){
String ar = "fish";
String ar2 = "fish";
System.out.println(ar == ar2);
}
}
【问题讨论】:
-
编译器可能看到了优化。没有理由将字符串文字存储两次。因此,它们具有相同的引用。
-
看起来编译器可能已经为你保留了字符串
-
导致智能java编译器不会两次创建相同的字符串。
-
重复中的顶级答案讨论了此比较成功的原因。
标签: java string memory string-comparison