当前位置: 首页 > 知识库问答 >
问题:

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

班宏毅
2023-03-14

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

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

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

共有3个答案

丌官绍元
2023-03-14

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();
    }
}
寿高阳
2023-03-14

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

举个例子:

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

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

钱澄邈
2023-03-14

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

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

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

 类似资料:
  • 问题内容: 打印char数组不显示哈希码: 输出: 为什么将整数数组打印为哈希码而不是char数组? 问题答案: 首先,就像其他任何类型的数组一样,char数组是Java中的Object。只是以不同的方式打印。 (这是实例的类型)具有用于字符数组的特殊版本--因此不必调用该数组。最终调用,将数组的字符写入输出流。 这就是为什么对a调用println与对其他类型的数组调用它的行为有所不同的原因。对于

  • 我正在制作一个程序,创建一个名为Student的新类,该类设置并获取一些不同的变量。我基本上所有的东西都在工作,除了当我试图将正确打印的数组元素存储到我的ArrayList中时,我得到的是哈希代码。我相信改变一两件小事就能解决问题,但我无能为力。感谢您的任何建议! 主要: 学生班级:

  • 问题内容: 如果未重写hashCode()方法,那么对Java中的任何对象调用hashCode()的结果是什么? 问题答案: 在HotSpot JVM中,默认情况下会在第一次调用时生成未重载或随机数并将其存储在对象标头中。随后的调用或仅从标头中提取此值。默认情况下,它与对象内容或对象位置没有共同点,只有随机数。此行为由HotSpot JVM选项控制,该选项具有以下可能的值: 0:使用全局随机数发生

  • Object.hashCode()的Java文档是这样说的: 如果根据equals(Object)方法,两个对象相等,那么对两个对象中的每一个调用hashCode方法都必须产生相同的整数结果。 但是他们没有解释为什么两个相等的对象必须返回相等的哈希码。为什么Oracle工程师决定在重写时必须重写? 的典型实现不调用方法: 在《有效Java》(第二版)中,我读到: 第9项:当重写Equals时,始终

  • 问题内容: 从这个问题出发,我很想知道何时 计算 python对象的哈希值? 在某个实例的时间 第一次叫 每次都被调用,或者 我还有其他机会吗? 这可能会根据对象的类型而有所不同吗? 为什么其他整数等于其哈希值呢? 问题答案: 通常可以在每次使用哈希时进行计算,因为您可以很容易地检查一下自己(请参阅下文)。当然,任何特定对象都可以自由缓存其哈希。例如,CPython字符串执行此操作,但元组不执行此

  • 我有一个简短的问题 我有飞行、水上课程和动物课程 如果我只想打印出动物对象数组中的飞行物体 做这样的事安全吗 或 执行此操作并重写toString方法 我是java新手,所以我甚至不确定这两个是否正确。所以欢迎任何帮助 谢谢你的帮助 编辑- 对不起,模棱两可的问题这是我问题的一个例子 我可以做输出 = A.toString() 来获取对象字符串还是我必须做 并重写toString方法以打印出类和示