【发布时间】:2016-02-07 10:08:57
【问题描述】:
说不可变对象是在每次我们想要更改/引用原始对象时由深拷贝创建的,而可变对象是在我们创建另一个引用时由浅拷贝创建的。
例如:
String s1 = "s";
String s2 = s1;
和:
Person p1 = new Person();
Person p2 = p1;
就我而言,s2 将获得它自己的“s”副本(不是参考副本)。 这如何将字符串池概念与字符串文字的单个实例相匹配? 在 Person 的情况下,我们将有两个对一个 Person 实例的引用,对吗?
【问题讨论】:
-
在您的第二个示例中,您不是制作浅拷贝,而是创建对同一实例的第二个引用
-
没有一个案例创建第二个对象。仅复制引用。
-
里面根本没有深拷贝。我认为您混淆了一些概念。你能告诉我们你从哪里得到分配一个不可变对象给你一个新副本的概念吗?
-
虽然与此示例无关,但您确实提出了它。字符串池用于
String s1 = "s"; String s2 = "s"等情况。虽然不能保证,但在大多数情况下,这些字符串将存储在字符串池中,s1 == s2将返回 true。
标签: java immutability