4

发现我可以做到以下几点:

package test.java.lang;
import java.util.Arrays;

    public class Tester_ArrayCloning_01 {

        public static void main(String[] args) {
            double[] vals1 = {1.2, 2.3, 3.4, 4.5};
            double[] vals2;

            // vals2 = (double[])vals1.clone(); // was thinking should do so
            vals2 = vals1.clone(); // but happened can do so

            System.out.println(Arrays.toString(vals2));
        }

    }

为什么?什么时候介绍的?

4

3 回答 3

9

JLS 的第 10.7 节,数组成员

数组类型的成员全部如下:

...

  • 公共方法clone,它覆盖了 Object 类中的同名方法,并且不抛出任何已检查的异常。数组类型 T[] 的克隆方法的返回类型是 T[]。

第三版中的相同部分具有相同的内容。

第二说数组类型会覆盖clone(),但那时没有返回类型协变,所以他们不可能这样做返回T[]

所以基本上它是在 1.5 中引入的。

于 2013-03-19T13:38:18.353 回答
3

clone类型数组的方法的返回类型T[]T[]。由于Object.clone()returnObject这样的定义需要协变返回类型,这是在 Java 5 中引入的。

以前clone被定义为返回Object。这尤其是协变返回类型适合的问题,

于 2013-03-19T13:39:43.607 回答
3

Java 5 引入了协变返回类型,它允许任何代码(包括您自己的代码)利用它们。一般特性允许重写方法声明一个返回类型,它是原始返回类型的子类型。请注意,变量的声明类型必须正确才能使其正常工作。例如,以下内容无法编译:

Object vals1 = {1.2, 2.3, 3.4, 4.5};
double[] vals2;
vals2 = vals1.clone();
于 2013-03-19T13:39:47.267 回答