请问这个程序结果为什么是false
class M{
String name;
int age;
M(String name,int age)
{
this.name = name;
this.age = age;
}
};
public class eg1
{
public static void main(String args[])
{
M m = new M("abc",23);
M n = new M("abc",23);
System.out.println(m.equals(n));
}
}
equals不是用于比较内容的吗?这两个类的内容不是一样吗?
----------------解决方案--------------------------------------------------------
equals是用来比较字符串的内容的
----------------解决方案--------------------------------------------------------
虽然创建两个值相同的对象,但是在栈中创建了两个地址不同的引用,equals比较的是两个对象引用,引用所存放的地址不同,所以结果为false
----------------解决方案--------------------------------------------------------
这个问题中,equals方法是从Object类中继承而来的,Object中的equals方法是比较两个对象的引用是不是相等,其实在实际中这个方法只要你继承了Object类而且要是用这个方法,就应该重写equals方法。
public boolean equals(Object m){
M o= null;
if(m instanceof M) o = (M)m;
if(o != null){
if(o.name.equals(name)&& age==o.age)
return true;
else
return false;
}
return false;
}
----------------解决方案--------------------------------------------------------
equals 没有重写
m, n的内容分别在不同的内存空间,指向了不同的内存地址,equals比较时,实际上是调用了Object类中的equals方法,在用时需要重写。。。
public boolean equals(Object n){
boolean temp = true;
M m1 = this;
if(n instanceof M){
M m2 = (M)n;
if(!(m1.name.equals(m2.name)&&m1.age == m2.age));{
temp = false;
}
}else{
temp = false;
}
return temp;
}
----------------解决方案--------------------------------------------------------
equals默认是比较引用内存地址的和==是一样的!!!你说的比较内容是因为String中重写了equals方法!
----------------解决方案--------------------------------------------------------