Maybe worth splitting into its own topic:
Although I understand what copy does and the differences between a shallow copy and a deep copy I wonder why it's part of Object if it still requires a class that wants to support it to implement Cloneable, which in itself is only a marker Interface that controlls the specific operation of Object.clone().
As the
doc states "all arrays considered cloneable" is it just a work-around to make T[].clone() possible even when T itself doesn't implement cloneable itself?
Guess that's one of the compromises that had to be made when it was decided that an array is also seen as an object, even an array of primitives.
On the other side I'm not sure about how I would deal with this when Java would had been designed differently.