equals( )和==方法的注意点

先还原一下我之前意外翻车的事故现场。

 上面是我在遍历两个集合,然后对比区县的父ID和市的ID是否相等,然后将区县信息放到所属市的集合中,当遍历到九十多个市的时候发现distintVo.getPid() == cityVo.getId()就永远是false了,我当时简直了要抓狂,明明看值都是相等但是返回的就是false。

当时我差点就流下了没有技术的眼泪~~(哈哈哈,开玩笑,眼泪小时候都流完了)

后面检查下对比的两个对象都是Integer类型,Integer类型对比用==方法的时候当数值超过127的时候就会返回false,下面是我做的测试:

int i1 = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);

Integer i4 = 127;
Integer i5 = 127;
Integer i6 = 128;
Integer i7 = 128;

Integer i8 = new Integer(127);
Integer i9 = new Integer(127);

i1 == i2 返回true ;i1 == i3 返回true ;i4 == i5 返回true ,i6 == i7返回false ;i8 == i9 返回false ;i8.equals(i9)返回true ;i4 == i8 返回false。

总结:== 比较的是两个对象是否是同一个,看它们指向的首地址是否相等;equals()比较的是两个对象的逻辑值是否相等;

Integer是int的包装类,int初值是0,integer初值是null;无论如何Integer和new Integer()不会等,它们的内存地址不一样,使用==比较都是false;

两个都是非new出来的Integer,使用==比较,如果数值在-128到127之间都是返回true,反正返回false;

两个都是new 出来的Integer,使用==比较都是返回false,若要比较值相等需要使用equalse()方法比较;

int和Integer(无论new否)比较,返回都为true,因为Integer都会自动拆箱为int进行去比较。

猜你喜欢

转载自www.cnblogs.com/afeng-chen/p/11926485.html