书上给出的代码,有点看不懂啊~
public boolean equals(Object otherObject){if (this==otherObject)
return true;
if (otherObject==null)
return false;
if (this.getClass()!=otherObject.getClass())
return false;
//上面的判断已经将不是同一种类型的直接return false了,下面为何还要继续比较判断啊?
ComplexNumber other =(ComplexNumber)otherObject;
if (re==other.re && im==other.im)
return true;
else
return false;
}
--------------------编程问答-------------------- 尽信书不如无书 --------------------编程问答-------------------- 可以给点实质性的回答么? --------------------编程问答-------------------- 第一个if 判断是不是自己
第二个if 任何一个对象实例不能equals false
第三个if 不是同一个类型返回false。
接下来转型,判断数据成员的相等与否 --------------------编程问答-------------------- 第3个都判断了是不是同一个类型,后来为什么还要转型?还有楼主发的意思应该是
public boolean equals(Object otherObject){这样为什么会错? --------------------编程问答-------------------- 判断完是不是同一类型有P用,它最终要比较的是内容是否相等。 --------------------编程问答--------------------
if (this==otherObject)
return true;
if (otherObject==null)
return false;
if (this.getClass()!=otherObject.getClass())
return false;}
那如果都不是同一类型了直接return false啊,那后面还要转型比较干嘛 --------------------编程问答--------------------
那要是同一类型呢?不比了? --------------------编程问答-------------------- 同一类型还要成员相同才能认定为相同啊,人家没写错啊。 --------------------编程问答-------------------- //上面的判断已经将不是同一种类型的直接return false了,下面为何还要继续比较判断啊?
逻辑问题
如果不是同一类型return false,如果是,还要继续判断,SO。。 --------------------编程问答-------------------- 他的目的是要重写equals方法,首先如果两个==相同,则可以判断相同了,否则如果有一个为空,则返回false,其次如果类型不同,也可以判断为false,这里完事以后又才做了一些属性的判断,确定是否相同,这种重写是非常容易理解的,请仔细阅读代码,并理解作者的意图 --------------------编程问答-------------------- 楼主以后记得把代码块用代码块格式呈上哈,便于阅读^_^ --------------------编程问答-------------------- 是同一种类型,但是他们不一定equals呢,还得继续按自己的逻辑判断 --------------------编程问答-------------------- return在if里面不一定执行的到
指不定哪个return会被执行 ,所以都要写 --------------------编程问答-------------------- 代码逻辑完全没有问题,加上注释如下:
--------------------编程问答-------------------- 参数是object类型的 这个函数可以比较的不只是一种类型吧 --------------------编程问答-------------------- 必须传过来的是同一个类,否则false,必须传过来的不能是空的。如果地址相同了(是同一个对象),那就不比了 true。 接下来的情况就是 同一个类的两个对象在比较了,比较属性是否相等。 --------------------编程问答-------------------- 这个equals方法的作用就是重写Object类的equals方法,只有当2个对象的内容(就是re和im)相等时这2个对象才认为相等,这才是要比较的东西,而之前判断2个对象如果不是同一个类的,那肯定就不相等了,当2个对象都属于同一个类,这才有比较的价值。 --------------------编程问答-------------------- equals用来判定值是否相等的 需要逐个判断成员变量
public boolean equals(Object otherObject){
if (this==otherObject) //比较this和otherObject的地址是否一样
return true;
if (otherObject==null) //判断otherObject是否为null
return false;
if (this.getClass()!=otherObject.getClass()) //判断类型是否一样
return false;
//上面的判断已经将不是同一种类型的直接return false了,下面为何还要继续比较判断啊?(这个跟下面的代码完全没有冲突)
//因为如果上面判断是同一类型,才需要进一步判断内容是否也一样,如下
ComplexNumber other =(ComplexNumber)otherObject;
if (re==other.re && im==other.im)
return true;
else
return false;
}
补充:Java , Java SE