提问者:小点点

打印char数组和int数组在Java中的差异[重复]


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

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

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

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

共2个答案

匿名用户

PrintStream(即System.Out)有一个专用的方法重载PrintLn(char[]),用于打印char数组的字符。

它没有用于其他数组的特殊重载,因此当您传递int[]时,调用的方法是println(Object)。 该方法通过调用其toString()方法将传递的对象转换为字符串。

所有数组的toString()方法只是继承自类Object的默认方法,该方法显示它们的类名和默认哈希代码,这就是为什么它的信息不那么丰富的原因。 您可以使用arrays.toString(int[])获取int数组内容的字符串表示形式。

附注。 与文档所说的相反,对象的默认hashcode通常不是对象的地址,而是随机生成的数字。

匿名用户

当您说System.out.println(ch)时;

它会导致调用print(char[]s),然后调用println()

println的JavaDoc说:

打印字符,然后终止该行。 此方法的行为类似于调用print(char),然后调用println()。

整数变量不是char,因此print(int[]s)获取数组的地址。