在 Java 中克隆对象时字符串会发生什么情况?

What happens to Strings when object is cloned in Java?

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

这里的问题是 Java 在克隆时是否对字符串进行不同的处理并创建它的新对象?

new 总是创建新的 String 对象

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

克隆

  1. 如果是克隆,则完全取决于克隆方法的实现
  2. 如果克隆是 super.clone 而没有任何额外的代码,那么所有的引用都会被复制(假设 super 是对象)
  3. 因此克隆对象中的 String 引用将共享原始对象指向的现有 String 个对象