Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较对象和原语,以及运算符==在Java中是如何工作的?_Java_Object_Comparison_Primitive - Fatal编程技术网

比较对象和原语,以及运算符==在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。可以取消绑定的对象将作为原语进行比较,否则根本无法进行比较。