我从jls找到了引用:
可以使用相等运算符来比较两个操作数 convertible(§5.1.8)到数字类型,或两个boolean类型的操作数 或布尔值,或两个操作数,每个操作数都是引用类型或 null类型。所有其他情况都会导致编译时错误。
但是这段代码
String str= "";
Number num = 1;
System.out.println(str == num);
每个操作数都是引用!
说它是不兼容的类型。
jls在哪里说这些类型应该兼容?
答案 0 :(得分:5)
在section 15.21.3中(参考等式运算符==和!=):
如果无法通过强制转换(§5.5)将任一操作数的类型转换为另一种操作数的类型,那么这是一个编译时错误。两个操作数的运行时值必然不相等。