额,这个问题是javase中常见的一个问题。我们经常在判断条件里比较是用的非常多:
那么我就以我个人的看法和你谈谈吧:
equals是Object超类中的一个方法,这个方法的实现就是通过==号实现的,==号比较的是两个对象的地址是否相同,在代码中体现出来就是比较两个对象引用中保存的地址是否相同,==能够判断的只是两个对象引用是不是指向同一个地址也就是同一个对象,所以它的相等判断是局限的:
A a1 = new A();A a2 = a1;这个时候a1 == a2是否为true?答案是yes,因为两个对象引用保存的是同一个对象的地址;
A a1 = new A();A a2 = new A();这个时候a1 就不 == a2了,因为两个对象引用指向的是不同的对象.
正因为==号只能判断两个对象引用是否指向同一个对象,
所以决不能用它比较两个普通对象是否相等
,即使两个对象所有的实例域都相同,虽然这在现实中的语义是两个对象指的是同一个事物比如同一个人,
但是因为在代码中它们分配在不同的地址,所以用==号判断它们是不相等的.
|