代码如下:
import java.util.*;class Simple {
          static int count ;    
          int id = count++;
          public String toString (){
                              return "Simple " + id ;
                    }
}public class E07_Containers {
          public static void main(String[] args)   {
                    Simple[] s = { new Simple(),new Simple(),new Simple(),new Simple() };
                    List<Simple> ss = Arrays.asList(s);
                    System.out.println(ss);
                    List<Simple> sub = ss.subList(0, 2);
                    System.out.println(sub);
                    sub.clear();
                    System.out.println(ss);
          }
}
若运行会有异常,但将List<Simple> ss = new ArrayList<Simple>(Arrays.asList(s))后,结果正确,不明白为什么?
将sub.clear()注释掉的话,异常也会消失,为什么?

解决方案 »

  1.   

    之所以有异常时因为List<Simple> sub = ss.subList(0, 2);这一句中其实并没有产生一个新的列表,此处的sub指向的还是原来的List ss,只不过sub是ss的一个子视图,还是指向ss,所以当你在下面sub.clear()之后,原来的ss List也会被clear()掉,所以在下面你再输出ss List的时候就出现错误了。
    你可以结帖了。
      

  2.   

    asList(T... a)  返回一个受指定数组支持的固定大小的列表。
      

  3.   

    那如何解释 将List<Simple> ss = new ArrayList<Simple>(Arrays.asList(s))后,结果正确呢?