Java 为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?

Java 为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?,java,Java,为什么println方法只对字符数组使用不同的重载方法,而对其他数组(如字符串、整数等)不使用不同的重载方法 比如说 int intArray[] = {0,1,2}; char charArray[] = {'a','b','c'}; System.out.println(intArray); System.out.println(charArray); 输出: [I@19e0bfd abc System.out是一种方法,因此它有以下几种方法: 用于对象int[]。每次用对象调用它时都

为什么println方法只对字符数组使用不同的重载方法,而对其他数组(如字符串、整数等)不使用不同的重载方法

比如说

int intArray[] = {0,1,2};
char charArray[] = {'a','b','c'};
System.out.println(intArray);
System.out.println(charArray);
输出:

[I@19e0bfd
abc

System.out
是一种方法,因此它有以下几种方法:

  • 用于对象
    int[]
    。每次用对象调用它时都会使用它,如果
    toString()
    没有重载,它将打印它的“地址”
  • 用于
    char[]

因为在Java中不能为每种类型的对象重载一个方法,所以只能选择这一种

似乎是设计者决定的,因为在他们看来,这将是打印包含字符的数组最常用的方法。请注意,如果要打印数组的内容而不是在内存中打印其地址,可以使用
Arrays
类中提供的方法
toString()
。当数组包含除
char
以外的其他类型的对象时,它允许您以方便的方式打印数组的内容。你这样称呼它:

Arrays.toString(yourArray)

打印数组内容的另一种方法是在数组元素上创建循环:

for (YourClass object : yourArray) {
    System.out.println(object);
} 

最有可能是因为它是围绕写入字符流而设计的


System.out
是一个
PrintStream
,委托将数据写入
BufferedWriter
,后者又是
Writer
的实例

一些
Writer
可能性

void    write(char[] cbuf)
abstract void   write(char[] cbuf, int off, int len) 
void    write(int c)
void    write(String str) 
void    write(String str, int off, int len)
正因为如此,
PrintStream
中的每个
void print(…)
方法都使用
String.valueOf()
将其传递给
writer
并说
writer.write

人们注意到了这一点,并建议在数组中实现
toString
,但由于兼容性/稳定性问题,显然为时已晚。因此,我们决定实现helper方法来完成同样的事情

所以现在你可能会发现很多
System.out.println(Arrays.toString(newint[]{1,2,3}))

很可能是因为实现它的人选择了这种方式。最后,他们是否应该为每种可能存在的类型创建一个重载方法?因为一个字符串代表一个字符数组(而不是任何其他类型的数组)?我期待你们的答案?这是否回答了你们的问题?(编辑:哦,你已经看到了)我知道上述问题的答案,因为PrintStream类中有println的重载方法。我的问题不一样。为什么他们没有为其他基元类型数组重载此方法,或者重载字符数组方法背后有什么原因。