使用clone()在构造函数上创建对象有什么好处?

时间:2014-04-08 18:07:55

标签: java core

每当我进行浅层克隆时,如果我的类包含任何用户定义的引用类型,则会复制引用值但不会复制值,但如果我正在编写String s="something",那么即使{{1是一个对象但是它被直接复制到克隆对象中,为什么呢?是否意味着将复制预定义的对象,但是将复制用户定义的对象引用?

2 个答案:

答案 0 :(得分:0)

如果您想要一个具有相同状态的对象,那么您可以使用clone()。如果两者之间没有区别,我会说使用构造函数。克隆需要已经创建一个对象才能创建另一个实例,更不用说Cloneable的实现已经相当混乱了。

另请注意,您尝试使用clone()的对象必须实际实现Cloneable并覆盖该方法才能实际运行。

答案 1 :(得分:0)

这不是"预定义"对象类型被深度复制并且"用户定义"对象类型是浅层复制的。

你引用的例子是:

String s = "something";

是的,字符串文字是"对象"但是字符串是不可变对象,更重要的是它们是特殊的,直到它们被构建到语言本身的设计中。真的,你在这里做的与说YourClass varName = new YourClass();没什么不同。在这里,你创建一个新的String对象,其值为#34;某些东西" (如果string constant pool中不存在该文字)并将该对象的引用存储到s类型的变量String

您可以浅浅地复制字符串,就像浅层复制用户定义的对象一样:

String s = "something"; //in this example this would be the same as saying new String("something")
String imAShallowCopyOfS = s;

System.out.println(imAShallowCopyOfS == s); //true

您仍然只是将s指向的引用复制到imAShallowCopyOfS。我建议你不要使用字符串来学习java中引用的行为,因为它们是相当特殊的对象,接受编译器/ vm的一些特殊处理。