为什么选择System.out.println(“嘿s1 == s2:”+ s1 == s2);打印“false”作为输出而不是打印“hey s1 == s2:false”

时间:2014-10-28 07:38:02

标签: java string

我编写了以下java代码:

String s1 = new String("shan");
String s2 = new String("shan");
String s3="shan";
String s4="shan";
System.out.println("hey s1==s2:"+s1==s2);
System.out.println("s3==s4:"+s3==s4);
System.out.println("s1.equals(s2): "+s1.equals(s2));
System.out.println("s3.equals(s4): "+s3.equals(s4));
System.out.println("s1==s3: "+s1==s3);
System.out.println("s1.equals(s3): "+s1.equals(s3));
System.out.println("hey s1==s2:"+true);

输出:

false
false
s1.equals(s2): true
s3.equals(s4): true
false
s1.equals(s3): true
hey s1==s2:true

为什么第5行只输出“false”作为输出而不是“hey s1 == s2:false”?

4 个答案:

答案 0 :(得分:7)

System.out.println("hey s1==s2:"+s1==s2)

评估("hey s1==s2:"+s1)==s2false

这就是打印错误的原因。

此行为的原因是+运算符的precedence高于" =="操作

以下内容将打印出您的预期:

System.out.println("hey s1==s2:"+(s1==s2))

答案 1 :(得分:7)

Line5: System.out.println("hey s1==s2:"+s1==s2);

由于运算符优先级"hey s1==s2:"+s1首先解析,然后与 s2 进行比较,这会导致错误。

赋予最高优先权以解决纠正问题。括号具有最高优先级。

System.out.println("hey s1==s2:"+(s1==s2));

答案 2 :(得分:1)

要比较您必须致电s1.equals(s2)的字符串。结果是true==将指针与字符串进行比较,并且不一样。

答案 3 :(得分:0)

在语句中使用括号进行环绕声单独操作。

使用

System.out.println("hey s1==s2:"+(s1==s2));