比较对象和原语,运算符==如何在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);