在java中克隆()

use*_*813 7 java clone

import java.util.*;
import java.lang.*;

public class Test{
    public static void main(String[] argv){
        String s1="abc";
        String s2=(String) s1.clone();
    }    
}
Run Code Online (Sandbox Code Playgroud)

为什么这个简单的测试程序不起作用?

San*_*rma 20

clone是Object类的方法.对于一个"可克隆"的类,它应该实现标记Cloneable接口.Stringclass没有实现此接口,也没有覆盖克隆方法,因此错误.

我希望上面的代码段用于教育目的,因为你不应该觉得需要clone在Java中调用字符串,因为:

  1. Java中的字符串是不可变的.随意在方法/类之间共享它们
  2. 已经存在一个构造函数new String(String),它像一个复制构造函数,几乎等同于你的clone()调用.

  • 有效的Java项目11:明智地覆盖克隆.(或者甚至更好,只使用复制构造函数和克隆以外的其他东西.) (2认同)

Dil*_*nga 6

Object.clone()受到保护.这是一个棘手的API使用.

clone()当通过扩展方法的可见性来扩展Object时,通常会暴露一个.

在任何字符串克隆就没有什么意义,因为它既是final一成不变的.

复制字符串是有原因的; 这可以通过以下方式完成:

String s1 = ...;
String s2 = new String(s1)
Run Code Online (Sandbox Code Playgroud)