标签:lis 情况下 build out 循环 死循环 代码 uil public
集合对象中的toString()方法
1.代码:
public class Test {
public static void main(String[] args) {
Collection<String> c=new ArrayList<String>();
c.add("hello");
c.add("world");
c.add("java");
System.out.println(c);
}
}
//输出结果:
[hello, world, java]
2.问题:为什么直接输出的结果不是地址值呢?
其实Collection<String> c=new ArrayList<String>();这是多态,输出的是c的toString()方法,其实输出的是ArrayList的toString()
那么我们就去查看一下ArrayList的toString()方法,但是我们没有在ArrayList里面找到相关的toString()方法,那么我们去其父类里面找
,我们发现是有的。
3.toString()方法源码
public String toString(){
//集合本身调用迭代器方法,得到迭代器集合
Iterator<E> it =Iterator();
if(!it.hasNext())
return "[]";
StringBuilder sb=new StringBuilder();
sb.append("[");
//无条件死循环
for(;;){
E e=it.next();
sb.append(e==this ? "(this Collection)":e);
if(!it.hasNext())
return sb.append(‘]‘).toString();
sb.append(‘]‘).append(‘ ‘);
}
}
//有上面的代码,我们可见toString()方法的是指2就是属于字符串的拼接,然后再遍历的情况下获取数组调用toString()方法输出。
标签:lis 情况下 build out 循环 死循环 代码 uil public
原文地址:https://www.cnblogs.com/nwxayyf/p/9536533.html