首页 > 编程语言 > 详细

Java中对Integer对象使用==比较

时间:2020-06-11 16:25:37      阅读:40      评论:0      收藏:0      [点我收藏+]

相等有两种,其一是==表示的引用等价,另一种是每个对象继承自Object或自己重写的equals方法所表示的对象等价

通常来说两个Integer对象即使值相同,在用==判断引用等价的时候也会不相等,因为他们所处的内存地址不相同。然而在对Integer对象使用==比较的时候存在着一个特殊情况,当两个对象的值都在-128至127之间的时候,他们的数值相等的同时也会有引用等价,也就是说他们来自同一个内存地址。

这是因为jvm在运行时创建了一个缓存区域,并创建了一个integer的数组。这个数组存储了-128至127的值。因此如果integer的值在-128至127之间,则是去缓存里面获取。所以会有相同的内存地址。

附上一小段demo,便于大家理解。

public static void main(String[] args) {
        Integer integer1 = 127;
        Integer integer2 = 127;
        System.out.println(integer1 == integer2);

        Integer integer3 = 128;
        Integer integer4 = 128;
        System.out.println(integer3 == integer4);

    }

第一行输出true,第二行输出false。

 

另外,如果使用new关键字的话,即使对于-128至127的数,由于new的作用是开辟新的内存空间,所以==的结果会是false,如下:

public static void main(String[] args) {
        Integer integer1 = new Integer(127);
        Integer integer2 = new Integer(127);
        System.out.println(integer1 == integer2);

    }

不过这种写法已经过时,自从jdk9之后就不再使用了,这里面只不过拿来测试一下。

 

Java中对Integer对象使用==比较

原文:https://www.cnblogs.com/owczhlol/p/13093507.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!