关于== 和equals 的区别

关于== 和equals 的区别:
代码参考:

int a1 =127;
int b1 =127;
Integer a =127;
Integer b = new Integer(127);
System.out.println("a1和b1---------"+(a1==b1)+"-------基本类型没有equals()");
System.out.println("a1和a---------"+(a1==a)+"-------"+a.equals(a1));
System.out.println("a1和b---------"+(a1==b)+"-------"+b.equals(a1));
System.out.println("a和b---------"+(a==b)+"-------"+b.equals(a));
返回值:
    a1和b1---------true-------基本类型没有equals()
    a1和b---------true-------true
    a1和a---------true-------true
    a和b---------false-------true

总结:
“== ” 在基本类型 中 比较的是对象的内存地址,因为当a1赋值为127时,jvm给127在栈中提供一块内存,和内存的引用地址来存储127(栈中存基本类型数据和对象的引用地址),由于栈是共享的,第二次 创建 b1 的时候,因为内存中已存在127,所以b1会引用a1的地址,地址相同后内容肯定相同;
在封装类型中 比较的是对象的引用地址; new 的对象存在 堆中,堆中的对象不共享,所以每次new 时 ,都会在重新分配空间进行存储;这时他的堆内存地址 自然不相同;(而代码中Integer a =127 因为没有使用 new ,jvm不会进行对象创建)
equals 在obj 中 比较的是 对象的引用地址;
当equals被重写的时候,比如:String中的equals 比较的是内容;
而关于 int类型 和Integer 类型的比较 不管是 == 和equals 都是相等的(返回true),因为会自动拆装箱;
关于两个Integer 类型 的比较 :当Integer 的值 超过-128 ~ 127时;
代码参考:

    Integer i1 = 127;
    Integer i2 = 127;
    System.out.println("i1和i2---------" + (i1 == i2) + "-------" + i1.equals(i2));
    Integer i3 = 128;
    Integer i4 = 128;
    System.out.println("i3和i4---------" + (i3 == i4) + "-------" + i3.equals(i4));  
 返回值:
 i1和i2---------true-------true
 i3和i4---------false-------true

总结:
当Integer 的值为<128时,"==" 返回true 原因是jvm 在初始化的时候会给Integer在常量池中分配数据范围为-128 ~ 127 的数据来存放到内存空间中,每次使用都会去常量池中查是否有这个值,如果有返回对应的内存地址;当Integer 的值=>128时,jvm 会默认new一个对象(因为超过了Integer初始化取值范围-128 ~ 127);这时 i3和i4 new的对象存在了堆中,所以两个对象的内存地址不同,==会false,而Integer 重写了equals(),内容相同所以equals 为ture。

最后感谢语:谢谢大家的支持,如果有不明白的或者建议的留言哈!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我为offer而来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值