AbstractCollection 方法的toString()方法解析

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

 public String toString() {
        Iterator 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

你可能感兴趣的:(java)