我有两个阵列:
char[] chars = { '1', '2', '3' };
int[] numbers = { 1, 2, 3 };
为什么在System.out.print(chars)
123
之后调用System.out.print(numbers)
后我得到[C@9304b1
我有System.out.print("abc" + chars)
这样的情况?
更重要的是,在打印abc[C@9304b1
之后,我还得到[C@9304b1
。
我知道{{1}}等于chars.toString()方法,但为什么有时System.out.print只打印其元素?
答案 0 :(得分:4)
PrintStream
,System.out
的类型,对print
方法有几个重载,其中一个带有一个字符数组(char[]
):
打印一个字符数组。该 字符根据平台转换为字节 默认字符编码,这些字节完全写入 write(int)方法的方式。
因此,在您的第一个示例中,您会打印123
。但是,PrintStream
没有可以接受print
作为参数的int[]
重载,因此,您最终会调用print(Object)
,这将使用{Arrays.toString()
1}} toString
的方法,由其类型和哈希码组成。
要打印Object
,您可以改为使用{{3}}。
答案 1 :(得分:0)
因为默认的toString()只打印出一个默认的“这里是这个对象是什么/在哪里”,不同的类型做不同的事情。
答案 2 :(得分:0)
原因是System.out.print可以接受一个char数组并将其转换为可打印文本,从而给出字符串“123”,但是整数数组没有隐式方法将其自身显示为文本,所以它只显示数组的地址。