对于==而言
==对基本数据类型比较的是值
==对引用数据类型比较的是地址
对于equals方法
Object没有重写的equals方法比较的是地址
String重写的equals方法比较的是字符串是否相同
Integer重写了equals方法,比较的是int值是否相同
延申:对于基本数据类型和包装类的==比较(7种)
如果int和Interger进行比较
无论Interger是new还是直接赋一个int值
integer都会自动拆箱
比较的是两者的int值是否相等
Integer i1=128,int i2=128
i1==i2为true,
Integer i1=new Integer(128),int i2=128
i1==i2为true,
如果是使用关键字new
Integer i1=new Integer(2)
Integer i2=new Integer(2)
那么,地址一定是新开辟的
i1==i2比较为false
Integer i1=127,i2=127
i1==i2为true,
因为-128-127是byte的取值范围,在此范围内Integer会直接拆箱,从常量池里面直接获取,在内存里用原生的int基本数据类型,进行值的比较,
如果Integer i1=128,i2=128
i1==i2为false,
但是128不在常量池指定的byte范围,会新建一个对象
如果Integer i1=new Integer(2),i2=2
i1==i2为false,
任何new操作都会创建新的地址
==比较必然为false,但是equals要看方法是否被该包装类重写
如果Integer i1=128,i2=128
i1.equals(i2)为true,
Integer的equals方法进行了重写,比较的是int值
Java中==与equals详解
本文详细解析了Java中==运算符与equals方法的区别及使用场景。==用于基本数据类型的值比较,以及引用数据类型的地址比较;equals方法默认比较对象地址,但String和Integer等类重写了该方法来比较值。文章还特别分析了Integer对象在不同情况下的比较结果。
31万+

被折叠的 条评论
为什么被折叠?



