Java 为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?
为什么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[]。每次用对象调用它时都
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的重载方法。我的问题不一样。为什么他们没有为其他基元类型数组重载此方法,或者重载字符数组方法背后有什么原因。