如果 char 数组是 Java 中的对象,为什么打印它不显示其哈希代码?

2022-09-02 01:14:07

打印 char 数组不显示哈希代码:

class IntChararrayTest{
    public static void main(String[] args){
        int intArray[] = {0,1,2};
        char charArray[] = {'a','b','c'};
        System.out.println(intArray);
        System.out.println(charArray);
    }
}

输出:

[I@19e0bfd
abc

为什么整数数组打印为哈希代码而不是 char 数组?


答案 1

首先,char数组在Java中是一个对象,就像任何其他类型的数组一样。它只是打印方式不同。

PrintStream(这是实例的类型)具有特殊版本的 for 字符数组 - - 因此它不必调用该数组。它最终调用 ,它将数组的字符写入输出流。System.outprintlnpublic void println(char x[])toStringpublic void write(char cbuf[], int off, int len)

这就是为什么为 a 调用 println 的行为与为其他类型的数组调用 println 的行为不同。对于其他数组类型,选择重载,它调用 ,哪个调用 ,它返回类似于int数组的东西。char[]public void println(Object x)String.valueOf(x)x.toString()[I@19e0bfd


答案 2

int 数组是整数数组,其中作为可打印字符的 char 数组。打印器具有打印字符数组的功能,因为这就是它打印字符串的方式。因此,打印器将像字符串一样打印它们,而无需调用 toString() 方法将其转换为字符串。将 int 数组转换为字符串将返回哈希代码,并解释获取该输出的原因。

以这个为例:

int[] ints = new int[] { 1, 2, 3 };
char[] chars = new char[] { '1', '2', '3' }

如果您要使用您使用的方法打印这两个序列,它将打印int数组的哈希代码,后跟“123”。