现有类A  import java.io.Serializable;public class A implements Serializable{

private static final long serialVersionUID = 1L; private int a; private String b; public int getA() {
return a;
} public void setA(int a) {
this.a = a;
} public String getB() {
return b;
} public void setB(String b) {
this.b = b;
} @Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + a;
result = PRIME * result + ((b == null) ? 0 : b.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final A other = (A) obj;
if (a != other.a)
return false;
if (b == null) {
if (other.b != null)
return false;
} else if (!b.equals(other.b))
return false;
return true;
}}import java.io.Serializable;public class SuperA implements Serializable { private static final long serialVersionUID = 1L; private A a; public A getA() {
return a;
} public void setA(A a) {
this.a = a;
} @Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((a == null) ? 0 : a.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final SuperA other = (SuperA) obj;
if (a == null) {
if (other.a != null)
return false;
} else if (!a.equals(other.a))
return false;
return true;
}}在SuperA类中有没有必要将A属性一并写入equals和hashcode方法中去???

解决方案 »

  1.   


    SuperA sa1 = new SuperA();
    A a1 = new A();
    a1.setA(10);
    sa1.setA(a1);
    SuperA sa2= new SuperA();
    A a2 = new A();
    a2.setA(20);
    sa2.setA(a2);
    System.out.println(sa1.equals(sa2));
    equals改成:
    public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
    /*
            final SuperA other = (SuperA) obj;
            if (a == null) {
                if (other.a != null)
                    return false;
            } else if (!a.equals(other.a))
                return false;
    */
            return true;
        }
    上面的输出结果是true,不符合逻辑