基本数据类型和包装类型的 == 与 equals 的根本性区别(坑人小彩蛋)

本文揭示了Java中==和equals的区别。虽然通常认为==比较对象的地址,equals比较值,但实际情况更为复杂。对于基本数据类型,两者都比较值。然而,对于包装类型如Integer,在一定范围内,==也会比较值,这是因为Integer内部的缓存机制。对于浮点数包装类Float和Double,==总是比较地址,若要比较值需转换为LongBits。对于String,==比较地址,equals比较内容。总之,引用类型和包装类型建议使用equals进行值比较。
摘要由CSDN通过智能技术生成
自从在学校刷程序结果题以来,脑海一直有个印象, == 就是比较地址,equals 才是比较值。今天跟个技术大佬聊,才知道大家其实都很容易被刷题误导了。这篇文章,将彻底解决这两者的纠缠不清!

(1)equals的底层其实还是 == :

多说无益,直接上源码:
在这里插入图片描述

这也就是说,对象等引用类型如果用equals,比较的其实也是地址,跟使用 == 没有半毛钱区别:

在这里插入图片描述

(2)基本数据类型比较的是‘值’,这点无可挑剔,基本数据类型的包装类型 == 和 equals ,比较的都是 ‘值’ ,不关地址的任何事情!

在这里插入图片描述

这又是为什么呢
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值