关于
Arrays.copyOf是否会产生深浅的副本,似乎有很多混乱和不同的意见([1]和其他来源).
该测试表明该副本很深:
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
解决方案只是制作了顶层维度的深层副本,但其他维度是浅拷贝?真相是什么?