在哪里可以找到"=="等于操作数的 Java 文档?



我相信"=="用于参考比较(地址比较(。所以,我相信这应该打印出 false,但我有一个错误,无与伦比的类型:java.lang.Integer 和 java.lang.Double。在比较地址时,为什么类型很重要?这不是同一个地址,所以打印假。同样,我只是在寻找文档。这是一个假设性的问题。

Integer seven = 7;
Double sevenPointTwo = 7.2;
System.out.println("seven == sevenPointTwo is " + (seven == sevenPointTwo) );

你找到这个定义的地方是规范,它说:

15.21.3. 引用相等运算符==!=

如果相等运算符的操作数都是引用类型或 null 类型,则该运算是对象相等。

如果无法通过强制转换将任一操作数的类型转换为另一个操作数的类型,则存在编译时错误 (§5.5(。两个操作数的运行时值必然不相等(忽略两个值均为 null 的情况(。

在运行时,如果操作数值均为 null 或都引用同一对象或数组,则==的结果为 true;否则,结果为 false。

如果操作数值均为 null 或都引用同一对象或数组,则!=的结果为 false;否则,结果为 true。

虽然==可用于比较 String 类型的引用,但此类相等性测试确定两个操作数是否引用同一个 String 对象。如果操作数是不同的 String 对象,则结果为 false,即使它们包含相同的字符序列 (§3.10.5(。两个字符串 s 和 t 的内容可以通过方法调用 s.equals(t( 来测试相等性。

(他们的强调(

对象的相等性不仅仅是它们在内存中的位置。将一种类型的对象与另一种类型的对象进行比较永远不会产生真正的结果(请参阅其强调的部分(,因此编译器不会有一个永远不会为真的==,而是告诉您这是一个错误。

编译器会对可在编译时检测到的其他错误(例如无法访问的代码(执行此操作。

最新更新