为什么打印Java数组会显示内存位置

Why does printing a Java array show a memory location

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
int[] answer= new int[map.size()];  
HashMap<String, Integer> map = new HashMap<String, Integer>();  

for (int j=0; j<answer.length;j++){  
    int x=map.get(keys.get(j));  
    answer[j]=x;  
}  

return answer

当我在循环中使用System.out.println(x)打印x时,我得到1, 2, 3的值,但当我返回并打印答案时,我得到[I@9826ac5的值。你知道为什么吗?


I[是整数数组的"类类型"。打印出这个数组本身将打印类类型@,然后打印一个短的十六进制字符串,因为这是数组的哈希代码。这和你可能见过的类似于Object@0b1ac20的东西是一样的。这是作为Object的默认toString()实现的。

也许您想返回数组的特定元素,或者使用for循环打印整个数组?


长话短说,你不能轻易地用Java打印一个数组。这样做:

1
System.out.println( Arrays.toString(answer) );


因为这就是数组的toString()方法的实现方式