在println()中==的函数

时间:2018-07-14 05:18:15

标签: java equals println

String literal1 = "java"; 
String object = new String("java"); 
String literal2 = "java";

System.out.println("result 1 = " + (literal1 == object) ); 
System.out.println("result 2 = " + literal1.equals(object)); 
System.out.println("result 3 = " + literal1 == object); 
System.out.println("result 4 = " + literal1.equals(object));
System.out.println("result 5 = " + literal1 == literal2); 
System.out.println("result 6 = " + literal1.equals(literal2));

预期产量

result 1 = false
result 2 = true
result 3 = false
result 4 = true
result 5 = false
result 6 = true

获得的输出

result 1 = false
result 2 = true
false
result 4 = true
false
result 6 = true

此行时

System.out.println(“结果5 =” +文字1 ==文字2);

已更改为

System.out.println(“结果5 =” +(literal1 == literal2));

输出

result 5 = true 

谁能解释为什么会这样吗?

3 个答案:

答案 0 :(得分:4)

之所以会这样,是因为表达式是从左到右求值的,因此它将首先连接您的字符串(即"result 3 = " + literal1),然后检查真实性(即== object),由于连接的结果与false的值不同,因此仅打印object

在第一个(也是最后一个)示例("result 1 = " + (literal1 == object))中,您使用括号将(literal == object)引导到默认评估中,强制false在合并之前 进行单独评估,这就是打印{的原因{1}}仅用于该评估,并与它前面的字符串连接。

答案 1 :(得分:1)

  

System.out.println(“结果3 =” + literal1 == object);

     

System.out.println(“结果5 =” +文字1 ==文字2);

等同于

  

System.out.println((“结果3 =” + literal1)== object);

     

System.out.println((“结果5 =” + literal1)== literal2);

这是字符串串联

  1. 该表达式从左到右求值。
  2. 如果两个操作数中的任何一个是字符串,则 + 表示串联

您可以尝试以下方法:

  
    

System.out.println(1 + 2 +“ 3”);

  
     

输出:

     
    

33

  

1 + 2 = 3

3 +“ 3” =“ 33”

  
    

System.out.println(“ 1” + 2 + 3);

  
     

输出:

     
    

123

  

“ 1” + 2 =“ 12”

“ 12” + 3 =“ 123

答案 2 :(得分:1)

TLDR:它是优先级,不是从左到右

Java确实有一个规则,即操作数是从左到右求值的,但这在这里没有效果。

在Java中,除赋值外,所有二进制(表示二操作数,不是按位运算符)运算符都是左关联的,但这在这里不适用,因为关联性仅在运算符具有相同优先级时才重要。

这里重要的是,+的{​​{3}}比==高,如VietDD所说

System.out.println("result 5 = " + literal1 == literal2);
# is equivalent to
System.out.println(("result 5 = " + literal1) == literal2);
# which is false because they aren't the same object

恰好与左侧分组相同。

但是如果我们考虑代替

System.out.println(literal1 == literal2 + " is result 5!");
# THAT is equivalent to
System.out.println(literal1 == (literal2 + " is result 5!"));
# ditto

恰好与分组到右侧的相同。