为什么("str"+ x == y)只为参考类型编译?

Piy*_*agi 3 java equality operator-keyword

为什么==运算符与引用的行为不同于原始数据类型?

String string1 = "myString";
String string2 = "myString";
int num1 = 10;
int num2 = 10;
System.out.println("Value is "+string1==string2);   //WORKS FINE 
System.out.println("Value is "+num1==num2);         //COMPILE TIME ERROR
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚这背后的任何逻辑原因.

PS:故意不使用打印声明中的括号.
谢谢 :)

ars*_*jii 10

这是运营商优先权的问题.您的第二个印刷语句被解释为:

System.out.println(("Value is "+num1)==num2);  // notice the parenthesis
Run Code Online (Sandbox Code Playgroud)

它试图将字符串与int进行比较,从而产生编译时错误.添加括号来解决问题:

System.out.println("Value is " + (num1==num2));  // compiles
Run Code Online (Sandbox Code Playgroud)

Java的运算符的优先级中列出运营商.

现在,这个:

// original:
System.out.println("Value is "+string1==string2);

// equivalent to:
System.out.println(("Value is "+string1)==string2);
Run Code Online (Sandbox Code Playgroud)

因为"Value is "+string1字符串本身是有效的,所以将它string2与它进行比较是有效的==.