}
}
这是复写Object类的equals,使equals方法比较的不是两个对象的地址,而是比较两个对象所包含的内容。但是上面代码有个地方看不懂。请看注释处。作者: 张学永 时间: 2012-11-26 19:05
Student st = null;
//Student st = new Student();为什么这里不能创建一个对象,这里创建对象就会出错
在这里,如果上面已经有了Student st = null;
你在它下面有创建Student st = new Student(),是错误的,因为你用st指向了两个引用 。。。而你写成 st=new Student()就不会报错。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Student st = new Student();//这里如果上面没有Student st =null,这里创建一个对象,程序又是对的。。
if(obj instanceof Student)
st = (Student)obj; 这里你把st的引用的指向给变了,让它指向了obj对应的那个对象。赋值之后,你的st就是原来的obj.
所以程序还是可以运行的。作者: 张权 时间: 2012-11-26 19:30
张学永 发表于 2012-11-26 19:05
Student st = null;
//Student st = new Student();为什么这里不能创建一 ...
你没懂我的意思啊!!!作者: 快乐之恋 时间: 2012-11-26 19:42
//Student st = new Student();为什么这里不能创建一个对象,这里创建对象就会出错这句话应该放在一个方法调用里,而不是类里。你如果在那里定义了就相当于饿汗式例如代码class Single
{
private Single(){}
private static Single s = new Single();
public static Single getInstance()
{
return s;
}
}作者: 张权 时间: 2012-11-26 19:45 本帖最后由 张权 于 2012-11-26 19:53 编辑
为了方便让大家看清楚,代码重发一遍:错误代码::class Student
{
String name;
int age;
Student st = new Student();
public boolean equals(Object obj)
{
if(obj instanceof Student)
st = (Student)obj;
else
return false;
if(this.name==st.name && this.age==st.age)
return true;
else
return false;
}
}
class InstanceofTest
{
public static void main(String[] args)
{
Student st1 = new Student();
st1.name = "zhang";
st1.age = 20;