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

标签 java arrays char

打印 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 数组是 Java 中的 Object,就像任何其他类型的数组一样。只是打印方式不同。

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

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

关于java - 如果 char 数组是 Java 中的 Object,为什么打印它不显示其哈希码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31218498/

相关文章:

java - Java中如何比较日期?

java - 带参数的灵活搜索返回空值

Java Web 应用程序需要同时支持 Web 和移动设备

Python 追加到 ndarray

java - 检查字母是否大写的更快方法(性能)?

java - 为什么要避免 Java 中的常量折叠?什么时候?

javascript - 一般使用javascript map函数是什么意思?

c++ - Bad_alloc 声明数组时,似乎内存不够

c - 从多个 sockaddr_storage 中提取 IP 和端口到 char* 中

c++ - 检查 char 数组的所有元素