关于自动装箱基本类型的值的比较

来源:互联网 发布:康熙王朝 1080p 源码 编辑:程序博客网 时间:2024/06/06 14:12

【问题描述】As we know,在Java里面我们比较基本数据类型的的值是否相等直接用 “==” 操作符,这样是完全合理的,因为JVM在做运算的时候是比较的值。但是当我们比较2个对象是否相等的时候,我们只能用equals方法,这个方法比较的是对象的Hash地址是否相等。但是当我们比较基本类型的装箱类的时候,情况确出现了问题。例如

 

呀,奇怪了,为什么会这样呢?

 

【问题解释】

 

其实这个是Java的设计者们遗留下来的一个问题。

设计者的思路大概是,用==来进行比较,大概一般都是要比较值,但这种写法是不对的,这样吧,当对象值在一个字节以内时,比较值和比较地址的成本是一样的,那我就给你比较值,但如果值大于一个字节,比较值的成本就大过比较地址了,我就老老实实比较地址吧。

所以,也就是说Boolean,char(从/u0000到/u007f),long(-128到127),int(-128到127),byte,当用 == 去比较自动装箱的对象的时候,输出都是true