如果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)
方法的作用是什么?