当我读到“我们可以用多少种方式在 java 中创建对象”时。
我找到了四种方法:
- 使用 new 运算符创建对象。
- 克隆
- 序列化
- 反射。
有了新的和反思,我对这两种方法都很好。
我的问题是:
为什么人们认为克隆和序列化是创建对象的不同方式?
当我读到“我们可以用多少种方式在 java 中创建对象”时。
我找到了四种方法:
有了新的和反思,我对这两种方法都很好。
我的问题是:
为什么人们认为克隆和序列化是创建对象的不同方式?
这里非常重要的一点是,在对象反序列化过程中不涉及构造函数——这就是为什么它是创建对象的一种独特方式。克隆也是如此——该方法Object.clone
通过 JVM 魔术创建一个新对象,同样不涉及任何构造函数。实际上,一方面这两种方式和另一方面new
的反射之间存在更大的差异,因为反射只是调用涉及特定构造函数的普通对象实例化的一种稍微不同的方式。
当你克隆一个对象时,这意味着你正在处理与原始对象不同的内存部分。是的,它们可能具有相同的属性,但它们是具有两个不同内存块的两个不同指针。
当您反序列化一个对象时,就会存在一个以前不存在的对象。即使你序列化然后立即反序列化,它也会独立于原始对象而存在。