比较对象和原语,运算符==如何在Java中工作?
例如:
Long objectLong = 555l; long primitiveLong = 555l; System.out.println(objectLong == primitiveLong); // result is true.
是否有调用objectLong.longValue()方法来比较Long to long或者其他一些方式?
与以往一样,Java语言规范是适当的咨询资源
从JLS 15.21.1 (“数字等式运算符==和!=”):
如果等于运算符的操作数都是数字类型,或者一个是数字类型而另一个是可转换的(第5.1.8节)是数字类型,则对操作数执行二进制数字提升(第5.6.2节)。
请注意,二进制数字提升执行值集转换(第5.1.13节),并可执行拆箱转换(第5.1.8节)。
然后从5.6.2 (二进制数字促销):
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示可转换为数字类型的值,以下规则适用,顺序如下:
- 如果任何操作数是引用类型,则进行拆箱转换(第5.1.8节)。
- […]
因此, Long
已经拆箱了long
。 您的代码相当于:
Long objectLong = 555l; long primitiveLong = 555l; // This unboxing is compiler-generated due to numeric promotion long tmpLong = objectLong.longValue(); System.out.println(tmpLong == primitiveLong);