AbstractCollection 方法的toString()方法解析

AbstractCollection 抽象类,是Java util下的Collection的骨干类,提供了很多方法。很多方法,都被具体的实现类重写了,但是toString方法好像保留了,这个方法的源码如下:

 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(", ");
    }
    }

里面有一句 

sb.append(e == this ? "(this Collection)" : e);

这句为啥要加这个判断呢,看下如下代码

ArrayList a = new ArrayList();
a.add("1");
a.add("2");
a.add(a);//加本身
System.out.println(a.toString());

   a.add(a),这句本身没有语法错误的,虽然一般人不会这么加,但是真这样加了,上面那句判断不加,当前e是this的话,被append调用,又会调用自身的toString(),无线循环了,就会 overstackflow 了。jdk源码严谨值得学习啊。


转载于:https://my.oschina.net/sharkbobo/blog/270342

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值