java中list对象为什么能直接输出其中的元素?object的对象却不能呢?

新手上路,请多包涵

List integers = new ArrayList();
integers.add(1);
integers.add(2);
System.out.println(integers);
输出:[1, 2]

Object[] objects = {1, 2};
System.out.println(objects);
System.out.println(Arrays.toString(objects));
输出:
[Ljava.lang.Object;@73e878e0
[1, 2]

那么问题来了,为什么list对象的不用Arrays.toString(**)就能显示其中的元素呢?为什么object对象却不能呢?求教。

阅读 13.8k
3 个回答

ArrayList

图片描述

图片描述

Object

图片描述

因为ArrayList类已经实现了toString方法。

Object[] objects = {1, 2};
System.out.println(objects);

首先,objects本身就是一个对象,是一个数组对象,其没有重载toString()方法,因此打印出来就是对象本身的类型和地址信息,这点毋庸置疑;

Object[] objects = {1, 2};
System.out.println(Arrays.toString(objects));

为什么Arrays.toString()能打印出Object的值?这个我们翻看一下源码就了然了:

// Arrays.toString()方法的源码
public static String toString(Object[] a) {
    if (a == null)
        return "null";
 int iMax = a.length - 1;
 if (iMax == -1)
        return "[]";
 StringBuilder b = new StringBuilder();
 b.append('[');
 for (int i = 0; ; i++) {
        b.append(String.valueOf(a[i]));
 if (i == iMax)
            return b.append(']').toString();
 b.append(", ");
 }
}

很容易理解,Arrays.toString()相当于实现了Object[]数组对象的toString(),因此自然就能打印出值了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题