比较对象和原语,以及运算符==在Java中是如何工作的?
例如:比较对象和原语,以及运算符==在Java中是如何工作的?,java,object,comparison,primitive,Java,Object,Comparison,Primitive,例如: Long objectLong = 555l; long primitiveLong = 555l; System.out.println(objectLong == primitiveLong); // result is true. 是否有调用objectLong.longValue方法来比较Long到Long或其他方式?与以往一样,Java语言规范是适当的参考资源 从数值相等运算符==和!=: 如果相等运算符的操作数都是数字类型,或者一个是数字类型,而另一个可转换为数字类型§5
Long objectLong = 555l;
long primitiveLong = 555l;
System.out.println(objectLong == primitiveLong); // result is true.
是否有调用objectLong.longValue方法来比较Long到Long或其他方式?与以往一样,Java语言规范是适当的参考资源 从数值相等运算符==和!=: 如果相等运算符的操作数都是数字类型,或者一个是数字类型,而另一个可转换为数字类型§5.1.8,则对操作数§5.6.2执行二进制数字提升 请注意,二进制数字升级执行§5.1.13中的值集转换,并可能执行§5.1.8中的解装箱转换 然后从二进制数字升级: 当运算符将二进制数字提升应用于一对操作数(每个操作数必须表示可转换为数字类型的值)时,以下规则依次适用: 如果任何操作数为引用类型,则应进行§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);
请注意,这可能会导致NullPointerException。可以取消绑定的对象将作为原语进行比较,否则根本无法进行比较。