在 Java 中打印 char 和 int 数组之间的区别
当我运行以下代码时,我得到数组的地址:
int arr[] = {2,5,3};
System.out.println(arr); // [I@3fe993
但是,当我声明一个字符数组并以相同的方式打印它时,它会为我提供数组的实际内容。为什么?
char ch[] = {'a','b','c'};
System.out.println(ch); // abc
当我运行以下代码时,我得到数组的地址:
int arr[] = {2,5,3};
System.out.println(arr); // [I@3fe993
但是,当我声明一个字符数组并以相同的方式打印它时,它会为我提供数组的实际内容。为什么?
char ch[] = {'a','b','c'};
System.out.println(ch); // abc
类(就是这样)有一个专用的方法重载println(char[]),
它打印char数组的字符。PrintStream
System.out
它对其他数组没有特殊的重载,因此当您传递被调用的方法是println(Object)时
。该方法通过调用其方法将传递的对象转换为字符串。int[]
toString()
所有数组的方法只是从类 Object
继承的默认方法,它显示它们的类名和默认哈希码,这就是为什么它的信息量不是那么大。可以使用 Arrays.toString(int[])
获取 int 数组内容的字符串表示形式。toString()
附言:与文档所说的相反,对象的默认哈希码通常不是对象的地址,而是随机生成的数字。
当你说System.out.println(ch)
它导致调用 print(char[] s), 然后 println()
用于 println 的 JavaDoc 说:
打印一个字符,然后终止该行。此方法的行为就像它调用 print(char) 然后调用 println()。
整数变量不是 char,因此 print(int[] s) 获取数组的地址。