0
String s="hel"+"lo"

if(s == "hello")
 {
    //print true 

}
else
{
 //print false 
}

Sun jvm = true Ibm jvm = false

为什么会出现这种差异?

4

5 回答 5

7

==供参考比较。

对于 Sun JVM,这种行为很可能是由字符串池引起的。
对于 IBM JVM,它可能是一个不同的实现。

如果您需要对象比较使用equals

于 2013-05-23T12:15:18.457 回答
2

唯一成功的==是字符串在构造后被保留。我认为关键点是 javac 是否+在编译时优化,即如果 JVM 看到

String s = "hello"

或者

String s = "hell" + "lo".

(顺便说一句,这一定是复制粘贴错误 - 连接值中会有三个 l)

于 2013-05-23T12:18:21.767 回答
1

==用于检查两个对象是否引用同一个对象。用于if(object1.equals(object))检查两个对象的内容是否相等

于 2013-05-23T12:16:57.633 回答
1

我会指出 Java 7 和 6 与实习字符串的行为不同,请参阅此答案

如果您使用的是 sun Java 7,那么 IBM jvm 可能仍在作为 Java 6 工作。

于 2013-05-23T12:32:08.237 回答
0

虽然没有回答你的问题:在字符串上做 == 很可能不是你想要的。

    if(s.equals("hello")) {

可能是你真正想做的...

编辑:由于“==”比较引用,这取决于它们对如何创建新字符串的实现,两个jvm可能同时与它们的结果是正确的!"==" 不是检查 Java 中字符串相等性的有效运算符。

于 2013-05-23T12:15:41.820 回答