每当我尝试打印字符数组到控制台,我得到的结果是整数格式,但每当我尝试将整数数组打印到控制台,我得到的结果哈希码格式。任何人都可以告诉我为什么?在Java中的打印方法混乱
char[] arr={'4','5','6'};
System.out.println(arr); //456
int[] arr={4,5,6};
System.out.println(arr) //[[email protected]]
每当我尝试打印字符数组到控制台,我得到的结果是整数格式,但每当我尝试将整数数组打印到控制台,我得到的结果哈希码格式。任何人都可以告诉我为什么?在Java中的打印方法混乱
char[] arr={'4','5','6'};
System.out.println(arr); //456
int[] arr={4,5,6};
System.out.println(arr) //[[email protected]]
java.io.PrintStream
(类的System.out
)具有特殊print
-method for char[]
,而不是int[]
。因此,对于char[]
,使用此特殊方法,而int[]
通过通用版本打印,该通用版本打印哈希码(或更确切地说,以对象作为参数调用String.valueOf()
的结果)。
我认为第一个被视为CharSequence ...就像一个字符串。
在第一种情况下,字符数组就像字符串一样使用(实际上它也只是一个字符数组)。
在第二个对整数数组类型没有重载,只是打印出对象引用。
仅仅因为没有特别处理int[]
的方法。它将由String#valueOf()
打印,而不是隐含地称为Object#toString()
。如果Object#toString()
在给定的对象类型中未被覆盖,则会打印以下内容(根据上述API)。
getClass().getName() + '@' + Integer.toHexString(hashCode())
的int[]
类有[I
的名称。
达到你想要什么,你需要Arrays#toString()
代替:
int[] arr = {4, 5, 6};
System.out.println(Arrays.toString(arr)); // [4, 5, 6]