list 直接输出为什么是一个数组?

在collection,例如list中,

List<Integer> list = new ArrayList<>();
list.add(1);
System.out.println(list);


直接借助于类对象的名字就可以输出正确list ,而数组则必须使用for循环逐个输出,或者是使用Arrays中tostring方法。
这是为什么?小白,知道这样写,只想知道背后的为什么?已经知道“直接输出类对象时,是调用tostring方法”
类似就是想明白这个直接输出list对象的时候是调用什么??有专业术语名称吗?

VBA实现数组Array与集合Collection互换

 

Java code

List<Integer> list = new ArrayList<>();
list.add(1);
System.out.println(list);

其实也是输出的list的toString方法,看源码我们可以知道:


Java code

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
 
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {

可以看到 ArrayList --> AbstractList --> AbstractCollection
而在AbstractCollection类型可以看到重写了 toString 方法


Java code

public String toString() {
        Iterator<E> i = iterator();
    if (! i.hasNext())
        return "[]";
 
    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = i.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! i.hasNext())
        return sb.append(']').toString();
        sb.append(", ");
    }
    }

该方法也是循环输出集合中的元素,所以直接打印list就可以看到里面的数据,而至于数组为什么不能呢,byte[] 它只是一种基本数据类型,并不是一个类,就算是Byte[]那也只是一个包装类,里面存的数据也是Byte类型,而不是Byte[],Byte[]只是说明里面存了一组Byte类型的数据而已。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值