【问题标题】:What happens to Strings when object is cloned in Java?在 Java 中克隆对象时字符串会发生什么?
【发布时间】:2021-05-23 00:33:40
【问题描述】:

默认情况下Java会进行浅克隆,如果一个对象被克隆并且它有一个像String s = new String("Hi");这样的字符串,那么克隆的对象将指向一个新的字符串对象,或者它会引用前一个对象?

这里的问题是,Java 在克隆和创建字符串的新对象时是否对待字符串不同??

【问题讨论】:

  • 我认为您必须更具体地了解您的术语。 “浅层克隆”就像一个矛盾的说法,因为“浅层复制”和“克隆”是对立的。而Java中的clone这个词也用来描述clone()方法(一般应该避免使用)。关于new String()new 关键字 always 为您提供了一个新分配的对象。

标签: java string jvm cloning shallow-copy


【解决方案1】:

new 总是创建新的 String 对象

  1. 每次使用new创建String,都会创建一个新对象
  2. 指向new创建的字符串的引用可以interned分配给字符串池中的现有条目,如果不存在则创建新条目。

克隆

  1. clone的情况下,完全取决于clone方法的实现
  2. 如果克隆是作为super.clone 完成的,没有任何附加代码,则复制所有引用(假设super 是对象)
  3. 所以克隆对象内部的String引用将共享原始对象指向的现有String对象

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多