Why can clone array without type cast?

arrays, clone, java

Solution

From section 10.7 of the JLS, array members:

The members of an array type are all of the following:

...

- The public method `clone`, which overrides the method of the same name in class Object and throws no checked exceptions. The return type of the clone method of an array type T[] is T[].

The same section in the third edition has the same content.

The second edition says that array types override `clone()`, but at that point there was no return type covariance, so they couldn't have done so returning `T[]`.

So basically it was introduced in 1.5.

Problem

Found that I can do following: ``` 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)); } } ``` Why? When it was introduced?

Original source