有什么区别
1.List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia)); //copy
2.List<Integer> list2 = Arrays.asList(ia);
Run Code Online (Sandbox Code Playgroud)
哪里ia是整数数组.
我开始知道不允许进行某些操作list2.为什么会这样?它是如何存储在内存中的(引用/复制)?
当我洗牌时,list1不会影响原始数组,但list2确实如此.但仍list2有些令人困惑.
如何ArrayList列出列表与创建新列表不同ArrayList
list1 differs from (1)
ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));
Run Code Online (Sandbox Code Playgroud) 关于是否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
Run Code Online (Sandbox Code Playgroud)
该测试表明副本很浅:
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
Run Code Online (Sandbox Code Playgroud)
解决方案只是简单地制作了顶级维度的深层副本,但其他维度是浅层副本吗?真相是什么?