当前位置:编程学习 > JAVA >>

书上给出的代码,有点看不懂啊~

    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;
  }
--------------------编程问答-------------------- 尽信书不如无书 --------------------编程问答--------------------
引用 1 楼 u010006337 的回复:
尽信书不如无书
可以给点实质性的回答么? --------------------编程问答-------------------- 第一个if 判断是不是自己
第二个if 任何一个对象实例不能equals false
第三个if 不是同一个类型返回false。
接下来转型,判断数据成员的相等与否 --------------------编程问答--------------------
引用 3 楼 huntor 的回复:
第一个if 判断是不是自己
第二个if 任何一个对象实例不能equals false
第三个if 不是同一个类型返回false。
接下来转型,判断数据成员的相等与否
第3个都判断了是不是同一个类型,后来为什么还要转型?还有楼主发的意思应该是
 public boolean equals(Object otherObject){
     if (this==otherObject)     
              return true;
        if (otherObject==null)      
           return false;
        if (this.getClass()!=otherObject.getClass())   
           return false;}
这样为什么会错? --------------------编程问答-------------------- 判断完是不是同一类型有P用,它最终要比较的是内容是否相等。 --------------------编程问答--------------------
引用 5 楼 forgetsam 的回复:
判断完是不是同一类型有P用,它最终要比较的是内容是否相等。

那如果都不是同一类型了直接return false啊,那后面还要转型比较干嘛  --------------------编程问答--------------------
引用 6 楼 lxp0123 的回复:
Quote: 引用 5 楼 forgetsam 的回复:

判断完是不是同一类型有P用,它最终要比较的是内容是否相等。

那如果都不是同一类型了直接return false啊,那后面还要转型比较干嘛 


那要是同一类型呢?不比了? --------------------编程问答-------------------- 同一类型还要成员相同才能认定为相同啊,人家没写错啊。 --------------------编程问答-------------------- //上面的判断已经将不是同一种类型的直接return false了,下面为何还要继续比较判断啊?
逻辑问题

如果不是同一类型return false,如果是,还要继续判断,SO。。 --------------------编程问答-------------------- 他的目的是要重写equals方法,首先如果两个==相同,则可以判断相同了,否则如果有一个为空,则返回false,其次如果类型不同,也可以判断为false,这里完事以后又才做了一些属性的判断,确定是否相同,这种重写是非常容易理解的,请仔细阅读代码,并理解作者的意图 --------------------编程问答-------------------- 楼主以后记得把代码块用代码块格式呈上哈,便于阅读^_^ --------------------编程问答-------------------- 是同一种类型,但是他们不一定equals呢,还得继续按自己的逻辑判断 --------------------编程问答-------------------- return在if里面不一定执行的到
指不定哪个return会被执行 ,所以都要写 --------------------编程问答-------------------- 代码逻辑完全没有问题,加上注释如下:

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;
   }
--------------------编程问答-------------------- 参数是object类型的   这个函数可以比较的不只是一种类型吧 --------------------编程问答-------------------- 必须传过来的是同一个类,否则false,必须传过来的不能是空的。如果地址相同了(是同一个对象),那就不比了 true。 接下来的情况就是 同一个类的两个对象在比较了,比较属性是否相等。 --------------------编程问答-------------------- 这个equals方法的作用就是重写Object类的equals方法,只有当2个对象的内容(就是re和im)相等时这2个对象才认为相等,这才是要比较的东西,而之前判断2个对象如果不是同一个类的,那肯定就不相等了,当2个对象都属于同一个类,这才有比较的价值。 --------------------编程问答-------------------- equals用来判定值是否相等的  需要逐个判断成员变量
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,