为什么不 Object.clone()调用需要一个明确的转换?这不是"垂头丧气总是需要和明确的演员"规则的例外吗?我使用javac命令行和带有JDK1.6.0_29的Eclipse Helios编译并成功运行以下代码.
public class Main {
public static void main(String[] args) {
byte[] original = { 1, 2, 3, 4 };
byte[] copy = original.clone();
for (byte b : copy) {
System.out.print(b + " ");
}
int[] originalInt = { 11, 22, 33, 44 };
int[] copyInt = originalInt.clone();
for (int i : copyInt) {
System.out.print(i + " ");
}
String[] originalStr = { "1", "2", "3", "4" };
String[] copyStr = originalStr.clone();
for (String s : copyStr) {
System.out.print(s + " ");
}
Main[] originalMain = { new Main() };
Main[] copyMain = originalMain.clone();
for (Main m : copyMain) {
System.out.print(m + " ");
}
} // end method main
} // end class Main
Run Code Online (Sandbox Code Playgroud)
你不打电话Object.clone().你正在呼叫T[].clone(),被覆盖以返回T[].
数组类型的成员是以下所有成员:
- public方法
clone,它在类中重写同名方法,Object并且不会抛出任何已检查的异常.数组类型方法的返回clone类型T[]是T[].