Java中对==,!=和equals的理解

在java中==,!=比较的是对象的索引,而equal才是比较对象的内容。如:
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
n1.equals(n2)为true,因为两个对象的内容是相同的
n1 == n2则为false,因为两个对象的索引不相同的

这是对基本类型的定义是这样的,如果是自己定义新对象model时,如果不重写equals方法则默认比较的也是索引,所以在自己定义对象时最好都要重写里面的hashcode和equals方法
这是thinkjava里面的例子
class Value {
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
} 输出为false;


因为对象Value没重写equals方法,所以默认比较的是索引,而v1和v2的索引是不相同的,如果你想通过比较里面的i的值来判断v1和v2是否相等,你就要重写他的hashcode和equals方法了。


[b]项目实践[/b]
在实际项目中重写自定义对象的hashcode和equals方法时也要注意自己的方式,看是否满足需求而定义这个方法,我就犯过一次错误

项目里面有一个对象是Figure,我定义hashcode/equals方法时只定义了id,只要id相同则就认为对象相同,而真正需求则不能满足,他只是满足了页面的显示了,那时id肯定不会为空。
由于在项目中这个对象是和另一个对象是多对一的关系,所以我要用Set集合来存Figure,这时错误就出现了,当我新增加多个Figure对象时,Set里面总是只存一个,因为他比较的是id,由于新增加的对象,还没有id呢,所以默认程序默认他们是相同的对象,最后导致项目运行时出了问题,数据不对,最后我们加了另一个属性name就好了,我们不可能把Figure属性都放在里面的,那样也会不会满足需求的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值