为什么toString()方法在Java中的Array和ArrayList对象之间工作不同
问题内容:
String[] array = {"a","c","b"};
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(array);
System.out.println(list);
For list
[a, b, c]
输出,而for
array
一些地址输出。当我们想要输出array
值时,我们可以Arrays.toString(array);
像使用一样使用它们list
。
我只是想知道为什么我们不能toString()
直接调用array
以获得值。这样做不是更直观,更方便吗?是什么导致对Array
和的不同处理ArrayList
?
问题答案:
数组和数组列表之间的主要区别在于,数组列表是用Java编写的类,具有自己的实现(包括覆盖的决定toString
),而数组是语言规范本身的一部分。JLS
10.7
特别指出:
数组类型的成员都是以下所有:
- 公众最终场长
- 公共方法克隆,它覆盖类Object中相同名称的方法,并且不引发任何检查的异常。
- 所有成员都从Object类继承;不继承的对象的唯一方法是其克隆方法。
换句话说,语言规范防止toString
覆盖数组的方法,因此它使用定义的默认实现,Object
该默认实现中将打印类名和哈希码。
为什么要做出这个决定是一个可能应该问给语言设计者的问题…