首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java --这两个对象怎么能平等呢?

问Java --这两个对象怎么能平等呢?
EN

Stack Overflow用户
提问于 2014-05-21 13:10:09
回答 3查看 172关注 0票数 1

嗨,我正在修改和理解等于()和'==‘之间的区别,但是这段代码确实让我感到困惑:

代码语言:javascript
复制
public class MyTest {
    public static void main(String[] args) {
        Integer w = new Integer(1);
        Integer x = 1;
        double z = x;
        System.out.println(z == w);
    }
}

当使用'==‘时,双重对象如何在内存中具有与Integer对象相同的引用?无法理解这一点。感谢您的阅读!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-21 13:12:39

如果使用==运算符比较原语和包装器,则包装器值将被取消装箱,并与原语值进行比较。

来自JLS 15.21.1

15.21.1.数值等式算子==和!= 如果相等运算符的操作数都是数值类型,或者一个是数值类型,另一个是可转换(第5.1.8条)为数字类型,则在操作数(第5.6.2条)上执行二进制数字提升。

票数 16
EN

Stack Overflow用户

发布于 2014-05-21 13:15:04

double不是引用,因为它是一个基本类型。相反,它是一个值。Double应该是一个参考。

在编写z == w时,z是double-typed,w是Integer-typed,运行时肯定需要进行比较。而且,很明显,它必须对同类事物进行比较。它不会将double值与Integer引用进行比较。相反,它将解压缩Integer,并将取消装箱后获得的int值与double值进行比较。两者都是1,布尔运算符将返回true。

票数 0
EN

Stack Overflow用户

发布于 2014-05-21 13:21:26

这里没有比较对象,而是将primitive类型与Integer的取消装箱的feature进行了比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23784175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档