Кажется, что существует много путаницы и разных мнений по этому поводу ([1] и другие источники) о том, будет ли Arrays.copyOf
производить глубокую или мелкую копию.
Этот тест показывает, что копия глубокая:
String[] sourceArray = new String[] { "Foo" };
String[] targetArray = java.util.Arrays.copyOf( sourceArray, 1 );
sourceArray[0] = "Bar";
assertThat( targetArray[0] ).isEqualTo( "Foo" ); // passes
Этот тест показывает, что копия неглубокая:
String[][] sourceArray = new String[][] { new String[] { "Foo" } };
String[][] targetArray = java.util.Arrays.copyOf( sourceArray, 1 );
sourceArray[0][0] = "Bar";
assertThat( targetArray[0][0] ).isEqualTo( "Foo" ); // fails
Является ли решение просто тем, что выполняется глубокая копия измерения верхнего уровня, но другие измерения - это мелкая копия? Какова правда?