java为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?
为什么println方法只对字符数组有不同的重载方法,而对其他数组(如字符串、整数等)没有重载方法我>
比如说
int intArray[] = {0,1,2};
char charArray[] = {'a','b','c'};
System.out.println(intArray);
System.out.println(charArray);
输出:
[I@19e0bfd
abc
你可以在下面搜索框中键入要查询的问题!
为什么println方法只对字符数组有不同的重载方法,而对其他数组(如字符串、整数等)没有重载方法我>
比如说
int intArray[] = {0,1,2};
char charArray[] = {'a','b','c'};
System.out.println(intArray);
System.out.println(charArray);
输出:
[I@19e0bfd
abc
# 1 楼答案
System.out
是一个^{int[]
。每次你用对象调用它时,它都会被使用,如果toString()
没有重载,它会打印它的“地址”char[]
因为不能为Java中的每种对象重载方法,所以只能选择这一种
# 2 楼答案
很可能是因为它是围绕着向字符流写入而设计的
System.out
是一个PrintStream
,它将写操作委托给一个BufferedWriter
,后者又是Writer
的实例一些可能性
正因为如此,
PrintStream
中的每个void print(..)
方法都使用String.valueOf()
将其传递给writer
并说writer.write(s)
人们注意到了这一点,并建议在数组中实现
toString
https://bugs.openjdk.java.net/browse/JDK-4168079,但显然为时已晚,因为兼容性/稳定性问题。因此,我们决定实施helper方法来完成同样的事情所以现在你可能会发现很多
System.out.println(Arrays.toString(new int[]{1,2,3}))
# 3 楼答案
似乎设计师决定这样做是因为在他们看来,这将是打印包含
char
的数组的最常用方式。请注意,如果您想打印数组的内容,而不是在内存中打印其地址,可以使用Arrays
类中提供的方法toString()
。当数组包含除char
以外的其他类型的对象时,它允许您以方便的方式打印数组的内容。你这样称呼它:Arrays.toString(yourArray);
打印数组内容的另一种方法是在数组元素上创建循环: