gpt4 book ai didi

java - 当我们可以使用=运算符复制对象时,为什么还要使用clone()?

转载 作者:行者123 更新时间:2023-12-02 01:16:51 25 4
gpt4 key购买 nike

Clone() 用于对象的精确副本。像这样

B s2=(B)s1.clone();  

但我们也可以使用 # 等语法复制对象

B s2=s1;

两种情况下的输出都是相同的,那为什么我们要使用clone()呢?

class B {
int rollno;
String name;

B(int rollno,String name) {
this.rollno = rollno;
this.name = name;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String args[]) {
try {
B s1 = new B(101, "amit");

B s2 = (B) s1.clone();

System.out.println(s1.rollno + " " + s1.name);
System.out.println(s2.rollno + " " + s2.name);
} catch (CloneNotSupportedException c) {
}
}
}

最佳答案

此行不会克隆对象:

B s2=s1;

它只是创建引用同一对象的第二个变量s2

当您在打印任一之前尝试修改 s2 时,您可以看到差异:

B s1 = new B(101, "amit");

B s2 = s1;
s2.name="newName";

System.out.println(s1.rollno + " " + s1.name);
System.out.println(s2.rollno + " " + s2.name);

此代码将打印 newName 作为两行的名称,因为实际上只有一个对象被两个变量引用。

但是,如果将 B s2 = s1 替换为 B s2 = s1.clone(),那么它将打印两个不同的名称,因为对象已创建。

关于java - 当我们可以使用=运算符复制对象时,为什么还要使用clone()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58431014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com