为什么我在不同的JVM中得到不同的结果以便跟随代码

时间:2013-05-23 12:13:51

标签: java jvm

String s="hel"+"lo"

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

}
else
{
 //print false 
}

Sun jvm = true Ibm jvm = false

为什么会出现这种差异?

5 个答案:

答案 0 :(得分:7)

==仅供参考比较。

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

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

答案 1 :(得分:2)

==只有在构造后字符串被插入时才会成功。我认为关键点在于javac是否在编译时优化+,即如果JVM看到

String s = "hello"

String s = "hell" + "lo".

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我想指出Java 7和6与实习字符串的行为不同,请参阅this answer

如果您使用的是Sun Java 7,那么IBM jvm仍然可以作为Java 6使用。

答案 4 :(得分:0)

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

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

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

编辑:因为“==”比较引用,取决于它们如何创建新字符串的实现,jvms可能同时与它们的结果一致! “==”不是检查Java中字符串相等性的有效运算符。