在JAVA编程遇到的一个问题,望高手搭救

来源:百度知道 编辑:UC知道 时间:2024/06/05 06:13:34
public class Citizen {
String id;
public Citizen(String theId)
{
id = theId;
}
public boolean equals(Object obj)
{
if(obj == null)
{
return false;
}
if(this == obj)
{
return true;
}
if(this.getClass() != obj.getClass())
{
return false;
}
Citizen c = (Citizen)obj;
return id.equals(c.id);
}

public static void main(String[] args) {
Citizen p1 = new Citizen("id00001");
Citizen p2 = new Citizen("id00001");
System.out.println(p1.equals(p2));
}
}

这个程序理解不了!!望哪位高手给讲解下!!

public Citizen(String theId)
if(obj == null)
看看要比较的对象是否为空,如果为空,则不相等,返回false。
if(this == obj)
看看要比较的对象是不是调用这个方法的对象本身,如果是,则相等,返回true。
if(this.getClass() != obj.getClass())
看看是不是同一个类的对象,如果不是,则不相等,返回false。
如果都不满足前面的判断条件,则执行
Citizen c = (Citizen)obj;
return id.equals(c.id);
比较这两个对象的id是否相等,如果相等,则返回true,否则返回false。

这就是重写了一个equals方法,要让System.out.println(p1.equals(p2));
这句为TRUE,还应该重写hashCode方法,
这两个方法配合起来就能让,让两个比较地址的对象比较值...
明白???

可惜了,
这是java程序中最简单的一类东西了。
楼主还要加把劲才好。

估计你是疑惑那个this==obj的地方

this与obj都是对象引用,而不是对象本身。所以equals()的缺省实现就是比较

对象引用是否一致;为何要如此实现呢? 前面我们说过:对象是否相等,是由我们的需求决定的,世界上的类千奇百怪(当然,这些类都是我们根据模拟现实世界而创造的),虽然Object是他们共同的祖先,可他又怎能知道他的子孙类比较相等的标准呢?但是他明白,任何一个对象,自己总是等于自己的,何谓“自己总是等于自己”呢,又如何判断“自己总是等于自己”呢?一个对象在内存中只有一份,但他的引用却可以有无穷多个,“对象自己的引用1=对象自己的引用2”,不就能判断“自己总是等于自己”吗?所以缺省实现实现自然也就是

this==obj;