为什么toString()方法在Java中的Array和ArrayList对象之间的工作方式不同

Ter*_* Li 14 java arrays arraylist tostring

    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);
Run Code Online (Sandbox Code Playgroud)

list [a, b, c]输出是为了输出array某些地址.当我们想要输出array值时,我们可以使用Arrays.toString(array);哪个就像list.

我只是想知道为什么我们不能toString()直接调用array来获取值.这样做不是更直观和方便吗?什么导致不同的治疗ArrayArrayList

ass*_*ias 16

数组和arraylist之间的主要区别在于arraylist是一个用Java编写的类,它有自己的实现(包括覆盖的决定toString),而数组是语言规范本身的一部分.特别是,JLS 10.7规定:

数组类型的成员是以下所有成员:

  • 公共最终字段长度
  • 公共方法clone,它覆盖Object类中的同名方法,并且不会抛出任何已检查的异常.
  • 所有成员都继承自Object类; 唯一没有继承的Object方法是它的clone方法.

换句话说,语言规范阻止了toString数组的方法被覆盖,因此它使用定义的默认实现来Object打印类名和哈希码.

为什么做出这个决定是一个问题,应该向语言的设计者提出......