Java中打印char和int数组之间的区别

Sha*_*wal 12 java arrays

当我运行以下代码时,我得到了数组的地址:

int arr[] = {2,5,3};
System.out.println(arr); // [I@3fe993
Run Code Online (Sandbox Code Playgroud)

但是当我声明一个字符数组并以相同的方式打印它时,它给了我数组的实际内容.为什么?

char ch[] = {'a','b','c'};
System.out.println(ch); // abc
Run Code Online (Sandbox Code Playgroud)

Boa*_*ann 16

PrintStream(它是什么System.out)有一个专用的方法重载println(char[]),它打印一个char数组的字符.

它对其他数组没有特殊的重载,所以当你传递一个int[]被调用的方法时println(Object).该方法通过调用其toString()方法将传递的对象转换为字符串.

toString()所有数组的方法都是从类Object继承的默认方法,它显示了它们的类名和默认的哈希码,这就是为什么它不那么有用.您可以使用Arrays.toString(int[])获取int数组内容的字符串表示形式.

PS与文档所说的相反,对象的默认哈希码通常不是对象的地址,而是随机生成的数字.