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

如果char数组是Java中的一个对象,为什么打印它时不显示其哈希代码?,java,arrays,char,Java,Arrays,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); } } 输出:

打印字符数组不会显示哈希代码:

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

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

首先,字符数组在Java中是一个对象,就像其他类型的数组一样。只是印刷方式不同而已

PrintStream
(这是
System.out
实例的类型)对于字符数组有一个特殊版本的
println
public void println(char x[])
,因此它不必为该数组调用
toString
。它最终调用
public void write(char cbuf[],int off,int len)
,将数组的字符写入输出流

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

当然,数组在Java中是对象。无论它是什么类型的数组。它在Java中始终是对象

但就您的问题而言,在
java.io.PrintStream
类中有一个方法,
println(char[]array)
,它从
char数组中打印出所有字符。这就是原因,当您将
char[]
作为参数传递给
println()
,它不会调用
toString()
java.util.Array
类的
方法,而是在数组中循环并打印每个字符

引用:
System.out
实际上为您提供了一个
PrintStream
的对象。它的
println(params)
具有一些重载方法,这些方法针对不同类型的
参数实现不同

如果是
char[]
的话,这个
params
将作为
char[]
元素提供输出,比如
System.out.println(charArray);
输出
abc
但不是
int[]
System.out.println(intArray);
输出
[I@19e0bfd

PS:-所有
数组
在Java中都被视为
对象


此外,要打印
array
,请始终使用
Arrays
实用程序类
最好用于打印
数组
对象。

整数数组是一个整数数组,其中作为可打印字符的字符数组。printwriter可以打印字符数组,因为这是它打印字符串的方式。因此,printwriter将像字符串一样打印它们,而不需要t调用toString()方法将其转换为字符串。将int数组转换为字符串将返回一个哈希代码,解释获得该输出的原因

以此为例:

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

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

System.out是PrintStream,它对char[]arg有一个特殊的方法

public void println(char x[]) {
    synchronized (this) {
        print(x);
        newLine();
    }
}
int[]通过此方法打印

public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (this) {
        print(s);
        newLine();
    }
}

其他答案正确地解释了您单独调用
PrintStream.println
的情况,对于
.print
也是如此。但是,您的标题可以涵盖其他打印方式
PrintWriter.println
。print
。write
确实有
char[]
用于简单调用的重载

但是,格式化没有特殊情况:

 System.out.format ("%s%n", charArray); // or printf
 myPrintWriter.format ("%s%n", charArray); // or printf
每个输出<代码>[C@hash
,类似于处理
int
和其他类型数组

通常用于打印的串联也不适用:

 System.out.println ("the value of charArray is " + charArray);

输出
字符数组的值为[C@hash

相关:另一个例子来说明以前的答案:
系统.out.println((对象)charArray);
系统.out
PrintStream
(我希望它是PrintWriter,但由于与旧版本一致,该类型没有更改为writer)。此答案不完整。
print(x)
方法的作用是什么?