当我运行以下代码我得到数组的地址:
int arr[] = {2,5,3}; System.out.println(arr); // [I@3fe993
但是当我声明一个字符数组并打印它的方式与数组的实际内容相同.为什么?
char ch[] = {'a','b','c'}; System.out.println(ch); // abc
解决方法
PrintStream类(它是System.out是什么)具有专门的方法重载
println(char[])
,它打印字符数组的字符.
它对其他数组没有特殊的重载,所以当你传递一个int []时,被调用的方法是println(Object)
.该方法通过调用它的toString()方法将传递的对象转换成一个字符串.
所有数组的toString()方法只是一个继承的默认值from class Object
,它显示了它们的类名和默认的哈希码,这就是为什么它不是很丰富.您可以使用Arrays.toString(int[])
获取int数组内容的字符串表示形式.
附:与文档所说的相反,对象的默认哈希码通常不是对象的地址,而是a randomly generated number.