对于所有的基本类型都是浅拷贝,不论什么方式;
但对于引用类型,当调用object的clone方法时,除String类型外,其他都为深拷贝;对于String对象类型要实现深拷贝必须要手动创建(new)一个新的String对象;
public class CloneAbleDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        CloneAbleImpl cloneAble = new CloneAbleImpl(1);
        cloneAble.setS("1");
        // 如果当前类未实现CloneAble接口,则会直接抛出CloneNotSupportedException异常信息
        CloneAbleImpl clone = cloneAble.clone();
        System.out.println(clone.getValue());
        //结果为false,深拷贝
        System.out.println(cloneAble == clone);
        // 当为浅拷贝时,结果为true
        // 数据流程为 cloneAble对象的s字段 -> clone对象的s字段; 对于String类型的复制实际默认是浅拷贝
        System.out.println(cloneAble.getS() == clone.getS());
        // 当为深拷贝时,上述结果为false,而当前结果为true
        System.out.println(cloneAble.getS().equals(clone.getS()));
    }
}
class CloneAbleImpl implements Cloneable {
    private final int value;
    private String s;
    CloneAbleImpl(int value) {
        this.value = value;
    }
    public int getValue() {
        return this.value;
    }
    public String getS() {
        return this.s;
    }
    public void setS(String s) {
        this.s = s;
    }
    /**
     * 重写object中的clone方法,并修改object中的clone的返回值和访问性
     *
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    public CloneAbleImpl clone() throws CloneNotSupportedException {
        CloneAbleImpl cloneAble = (CloneAbleImpl) super.clone();
        // 深拷贝,创建了一个新的String对象,对于s而言此时就是深拷贝
        cloneAble.setS(new String(this.s));
        return cloneAble;
    }
}
原文:https://www.cnblogs.com/xingguoblog/p/13652168.html