java中,循环遍历输出二维数组正常,用Arrays.toString()方法输出显示的是地址,为什么?

public class array2 {
public static void main(String[] args) {
int[][] a = {
{1,3},
{2,4}
};
int[][] b = {
{3,4},
{5,6}
};
int[][] c = new int[2][2];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
c[i][j] = a[i][j] + b[i][j];
System.out.print(c[i][j]+"\t");
}
System.out.println();
}
System.out.println((Arrays.toString(c)));
}
}
----------------------------------------------------------------
输出结果
————————————————————————————
4 7
7 10
[[I@504bae78, [I@3b764bce]

因为c是一个二维数组。相当于一个长度为2的数组,但是这个数组的元素是数组。

当执行Arrays.toString的时候相当于遍历数组,并且输出数组的元素,但是这个数组的元素是数组,所以这里输出的是地址。

可以进入到Arrays.toString里面看源码,

因为c是二维数组,所以这里的a[i]就是一个数组,并不是一个实际的数。然后每次执行String.valueOf(a[i])方法。然后进入源码String类里面的valuefOf方法。

在valueOf里面调用的是obj.toString()方法,

这里返回的字符串格式就是你控制台输出的样式。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-29
String arr[][] = {{"1","2","3"},{"4","5","6"},{"7","8","9"}};
        System.out.println(Arrays.deepToString(arr)); //使用这个函数!!

本回答被提问者采纳