站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题对象比较问题!在线等待......及时揭帖

对象比较问题!在线等待......及时揭帖

摘要: 对象比较问题!在线等待......及时揭帖


class Person
{
int age;
String name;
};
class objectEquals
{
public static void main(String[] args)
{
Person p1=new Person();
Person p2=new Person();
if (p1==p2)
{
System.out.println(-#34;p1,p2指向同一个对象-#34;);
}
else if (p1!=p2)
{
System.out.println(-#34;p1,p2指向不同的对象-#34;);
}
p1.name=-#34;xx-#34;;
p2.name=-#34;xx-#34;;
p1.age=20;
p2.age=20;
if (p1.equals(p2))
{
System.out.println(-#34;p1,p2所指对象的内容相同-#34;);
}
else //if (p1.equals(p2))
{
System.out.println(-#34;p1,p2所指对象的内容不相同-#34;);
}
//System.out.println(-#34;Hello World!-#34;);
}
}
//为什么p1,p2内容不相等,明明给的值都相同呀!!


你没有重写equals方法,调用的是Object对象的equals方法,其操作是直接判断是否==,而2个不同对象用==比较时是不等的,所以出现不等的结果


前面用了 == 号,显然,那是两个不同的对象,所以不等。
后面虽然用了比较方法,但是你没有覆盖实现,所以用的是超类的比较方法,所以很难说等不等。一般也是不等的。

如果楼主的意思是:关键属性相等,就认为相等,那么你需要覆盖 equals(Object obj) 方法。


以下是Object类的equals的定义:
public boolean equals(Object obj) {
return (this == obj);
}
我的理解是Object.equals方法是用来比较自己本身的。如果遇到本身没有equals的类,我们应该进行覆盖。
以下是String的equals:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}//先判断比较的是否为指向同一对象的变量,如果不是则对其内容逐一的比较
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}


↑返回目录
前一篇: 流问题:flush()方法为什么刷不出去?
后一篇: 如何判断java程序是否在windows下运行