字符串比较中的意外结果在java中?

时间:2014-03-22 08:13:52

标签: java

public class HelloWorld {
    public static void main(String[] args) {
        String s1="yes";
        String s2="yes";

        System.out.println("-------The result is-----"+ s1==s2);
        System.out.println("-------The result is-----"+ (s1==s2));    
    }
}

为什么上面的代码产生输出
 "假"
-------结果是-----真实

4 个答案:

答案 0 :(得分:5)

首先,您不应将字符串与==进行比较,而应与equals()进行比较。

还有运营商优先权的问题。这样:

"-------The result is-----"+ s1==s2

与:

相同
("-------The result is-----"+ s1) == s2

因为+的优先级高于==

答案 1 :(得分:0)

当您比较字符串时,您应该将==更改为.equals(),因为.equals()将字符串的内容相互比较或用于比较对象。 ==检查引用相等性或用于比较原语。我在下面更改了您的代码:

System.out.println("-------The result is-----"+ (s1.equals(s2)));

答案 2 :(得分:0)

您正在比较s1s2的引用,并且由于您单独定义它们,因此它们没有相同的引用。要比较字符串,请使用equalsequalsIgnoreCase

答案 3 :(得分:0)

'+' > '=='

所以

"-------The result is-----"+ s1==s2变为

("-------The result is-----"+ s1)==s2因而错误。