【发布时间】:2015-06-22 16:49:12
【问题描述】:
java 如何将数组类型转换为对象类型? 例如,假设我们有一个 int 数组 'src' 并且我们使用 System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 那么 java 如何将原始类型数组转换为 Object 的实例?同样在复制到'dest'时,它如何知道如何在不知道类型的情况下复制它?
它只是像克隆一样逐字节复制吗,因为当我运行以下代码时
int[][] a = new int[][] {{1,2,3,4,5},{6,7,8,9,0}};
int[][] b = new int[a.length][a[0].length];
System.arraycopy(a,0,b,0,a.length);
System.out.println(java.util.Arrays.toString(a));
b[1][3]=100;
System.out.println(java.util.Arrays.toString(a[0]));
System.out.println(java.util.Arrays.toString(a[1]));
我得到以下输出
[[I@7d08c1b7, [I@49e61582]
[1, 2, 3, 4, 5]
[6, 7, 8, 100, 0]
[[I@7d08c1b7, [I@49e61582] 的输出是什么?是不是像数组 a[0] 和 a[1] 的地址(像 C/C++ 中的指针数组)?
如果我更改了 b[1][3],a[1][3] 会如何变化?复制 a 的正确方法是什么?
编辑:java.lang.reflect.Array.getLength(Object array) 是如何工作的?
编辑:我想指出我更改了 b[1][3] 的值,但是在打印 a[1] 时,值 a[1][3] 也在发生变化。为什么会这样?
【问题讨论】: