JAVA之Intege的==与equals方法的区别

基本类型通过==比较的是他们的值大小,而引用类型比较的是他们的引用地址。

Object中equals方法如下,是比较两个对象的引用地址,

public boolean equals(Object obj) {
        return (this == obj);

}

Integer类重写了Object的equals方法,方法如下:

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;

}

因此,Integer的equals方法比较的是对象的值。

Integer a1 = 127;

Integer b1 = 127;

System.out.println(a1 == b1);     true

System.out.println(a1.equals(b1));     true

Integer a2 = 128;

Integer b2 = 128;

System.out.println(a2 == b2);     false

System.out.println(a2.equals(b2));     true

之所以这里a2 == b2为false,是因为IntegerCache的cache数组中初始化存入了-128~127的对象,当Integer的内容不在这个区间内时,会重新创建对象,当Integer的内容在这个区间内时,会去cache数组中取,所以a1和a2指向了都是cache数组中存的对象,是同一个,所以地址值相同;128不在caceh数组中,所以a2和b2会分别创建两个对象,指向不同,所以地址值不同。而equals方法比较的是对象的值,所以不管地址相同与否,值相同则equals比较为true。

Integer a3 = 128;

int b3 = 128;

System.out.println(a3 == b3);     true

一个Integer与int比较,会先将Integer自动拆箱转换成int类型,再做值比较,所以a3与b3比较的是值,为true。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值