String [][]a = new String[][]{{"a","b"},{"c","b","d","e"},{"q","w"}};
String [][]b = new String[3][5];
b[2][3] = "abcdefg";
System.arraycopy(a,0,b,0,a.length);
System.out.println(b[2][3]);这行为什么还是越界了
打b整个个遍历一次,为什么它的范围蛮成了a的范围,变小了,在次访问b所在的空间,就越界了.... String []a = new String[]{"a","b","c","d","e"};
String []b = new String[7];
System.arraycopy(a,0,b,0,a.length); 这个的b[6]为什么能打印出为是null
这个上面的二维为什么我觉得可以打印的值,为什么就越界了.....那位高手帮帮忙呀....初学者对这里有点不明白...
String [][]b = new String[3][5];
b[2][3] = "abcdefg";
System.arraycopy(a,0,b,0,a.length);
System.out.println(b[2][3]);这行为什么还是越界了
打b整个个遍历一次,为什么它的范围蛮成了a的范围,变小了,在次访问b所在的空间,就越界了.... String []a = new String[]{"a","b","c","d","e"};
String []b = new String[7];
System.arraycopy(a,0,b,0,a.length); 这个的b[6]为什么能打印出为是null
这个上面的二维为什么我觉得可以打印的值,为什么就越界了.....那位高手帮帮忙呀....初学者对这里有点不明白...
System.out.println(b[2][3]);数组越界原因,b[2][3]检查的是{"q","w"}从0开始但这只有两个元素。所以越界。
第二个错误:
你要输出的是b[7].可数组只有5个元素。所以输数null
System.arraycopy(a[i], 0, b[i], 0, a[i].length);
}
System.arraycopy(a,0,b,0,a.length);
//从数组a的a[0]开始复制a.length=3个数据(a[0],a[1],a[2])到数组b,从数组b[0]位置的三个数据
//即b[0]=a[0],b[1]=a[1],b[2]=a[2],
//b[2].length=2,b[2][3]越界
第一个问题是当执行完arraycopy(a,0,b,0,a.length);之后二维数组b已经不再是你定义的二维数组了,它受到二维数组a 的影响,b[i].length的值已经不再是5了,它得根据二维数组a中对应的a【i】.length的值一样,所以b[2].length的值为2,而不是3,当你要打印出b[2][3]编译器当然报告出界了。你可以运行一下以下代码你就完全明白了
String [][]a = new String[][]{{"a","b"},{"c","b","d","e"},{"q","w"}};
String [][]b = new String[4][5];
b[2][3] = "abcdefg";
System.arraycopy(a,0,b,0,a.length);
System.out.println(b.length);
System.out.println(b[2].length);
System.out.println(b[1].length);
System.out.println(b[0].length);
System.out.println(b[3].length);
至于b[i].length为什么会变化我想道理是六楼的解释了
a[1] ------> {"c","b","d","e"} //a[1]是长度为4的数组
a[2] ------> {"q","w"] //a[2]的长度也是2b -----> b[0] ------> 一个长度为5的数组
b[1] ------> 一个长度为5的数组
b[2] ------> 一个长度为5的数组System.arraycopy(a,0,b,0,a.length); 语句使得b[0]=a[0],b[1]=a[1],b[2]=a[2]
由于数组也是对象,b[0],b[1],b[2]都是指向数组对象的引用。而上面的数组拷贝操作已经改变了b[0]等引用所指向的内存区域,使得:
b -----> b[0] ------> {"a","b"}
b[1] ------> {"c","b","d","e"}
b[2] ------> {"q","w"]
这样b[2][3]当然就越界了