0

在这个程序中,我试图通过覆盖 equals 方法来比较两个引用变量值的字段值----这是代码----

public class D {
int i,j;

 D(int i,int j)
 {
     this.i=i;
     this.j=j;
 }
 public boolean equals(Object f)
 {
    boolean s= (this.i==((D)f).i);
    boolean n= (this.j==((D)f).j);
    return s==n;
 }
}

public class run02 {
 public static void main(String[] args){
 D d=new D(4,5);
 D d1=new D(6,7);
 D d2=new D(8,10);
 System.out.println(d.equals(d1));//comparing reference variable value
 System.out.println(d1.equals(d2));//comparing reference variable value
 System.out.println(d);//printing reference variable memory address
 System.out.println((d==d1));//comparing reference variable memory address
 }
}

Output-true//comparing reference variable value
       true//comparing reference variable value
       firstProg.e@g3h742//memory address
       false//comparing reference variable memory address

当我试图创建一个方法 public boolean equals(int i, intj) 而不给出返回值时,java会抛出编译错误。

4

2 回答 2

12

问题出在这一行:

return s==n;

true在这里,如果两者s都是n,这将返回false

仅当两者都为时才应使用s && n返回。truesntrue

于 2013-08-12T19:42:28.917 回答
2

当我试图创建一个方法 public boolean equals(int i, intj) 而不给出返回值时,java会抛出编译错误。

是的,它会给你一个编译错误,因为你试图欺骗编译器,就像在方法签名中你承诺编译器最后你会给它一个布尔值但最后你给它任何东西。所以,这就是编译器抱怨的原因。

于 2013-08-12T19:47:05.197 回答