在Java中打印基元数组

时间:2011-10-27 15:15:14

标签: java arrays printing primitive-types

我有两个阵列:

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只打印其元素?

3 个答案:

答案 0 :(得分:4)

PrintStreamSystem.out的类型,对print方法有几个重载,其中一个带有一个字符数组(char[]):

  

public void print(char[] s)

     
    

打印一个字符数组。该     字符根据平台转换为字节     默认字符编码,这些字节完全写入     write(int)方法的方式。

  

因此,在您的第一个示例中,您会打印123。但是,PrintStream没有可以接受print作为参数的int[]重载,因此,您最终会调用print(Object),这将使用{Arrays.toString() 1}} toString的方法,由其类型和哈希码组成。

要打印Object,您可以改为使用{{3}}。

答案 1 :(得分:0)

因为默认的toString()只打印出一个默认的“这里是这个对象是什么/在哪里”,不同的类型做不同的事情。

答案 2 :(得分:0)

原因是System.out.print可以接受一个char数组并将其转换为可打印文本,从而给出字符串“123”,但是整数数组没有隐式方法将其自身显示为文本,所以它只显示数组的地址。