日期:2014-05-20  浏览次数:20699 次

clone后为什么不equals
Java code

package prototype;

public abstract class AbstractPerson implements Cloneable{
    @Override
    protected Object clone() {
        Object obj=null;
        try {
            obj= super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return obj;
    }
    
    public abstract void canSpeak();
}




Java code

package prototype;

public class Person extends AbstractPerson{

    @Override
    public void canSpeak() {
        System.out.println("i can speack..");
    }

}





Java code

package prototype;

public class Client {
    public static void main(String[] args) {
        AbstractPerson ap=new Person();
        AbstractPerson ap2=null;
        ap2=(Person)ap.clone();
        System.out.println(ap2.equals(ap));
    }
}





为什么会是false???????????

------解决方案--------------------
你没重写equals它默认是判断是否指向同一对象(与==一样效果),clone出来的是两个不同对象,所以是false