Java'Object.clone'与Equals('= ...')

Jos*_*ker 1 java clone

最近一位朋友问我为什么C#中没有克隆功能.但我真的不明白为什么要使用克隆除了这个:

SomeClass cls = new SomeClass();
SomeClass cls2 = cls;
Run Code Online (Sandbox Code Playgroud)

你为什么要使用= cls.clone();,所以这样:

SomeClass cls = new SomeClass();
SomeClass cls2 = (SomeClass) cls.clone();
Run Code Online (Sandbox Code Playgroud)

我从来不理解这种差异.任何人都可以解释哪一个更好,有什么区别?

Nie*_*and 8

你在这做了什么

SomeClass cls = new SomeClass();
SomeClass cls2 = cls;
Run Code Online (Sandbox Code Playgroud)

正在为ONE,同一个对象创建两个引用.图片(可能有点难看,因为我自己画了;)):

在此输入图像描述

但是在这段代码中:

SomeClass cls = new SomeClass();
SomeClass cls2 = (SomeClass) cls.clone();
Run Code Online (Sandbox Code Playgroud)

您创建了具有两个引用的TWO对象,其中第二个对象是第一个对象的副本.cls指向第一个对象,而cls2指向第二个对象.Jvm必须为两个不同的对象预留空间而不是一个.图片:

在此输入图像描述