如果没有看过List或两个常常使用的实现类ArrayList、LinkedList的subList()方法的源码,而只是通过API文档,那末很多朋友很容易调入一个圈套。或有些朋友依据String的subString()方法来推测,List的subList()方法应当和String的subString()方法相似吧。的确,subList()得到的成果确切是该List的一个子list,这没有错,但是在得到该子list的同时,体系还做了一件隐藏的事情,那就是,将该子List(我们称作LIst B)内部的一个主要的List(我们称作LIst C)援用字段指向了该父List (我们称作LIst A)所指向的对象(也就是说,经过subList()方法运算以后,本来只有父List (LIst A)一个援用指向的对象,现在增长为两个援用指向该对象了,这两个援用分离是List A 和 List C),而之所以说这个内部的List 援用(List C)主要,是由于凡是该子List (List B)后续的增删操作,其实在实现他自己的容量和数据变更以外,还对他内部的这个List援用字段(List C)也进行了相应的增删操作,而List A (也就是本来的父List)和 该List C又同时指向本来List A (本来的父List)所指向的对象,所以在子List(List B)进行增删操作的时候,本来的父List(List A)内寄存的内容也一定会一起进行雷同的增删变更。如果没有看过List或两个常常使用的实现类ArrayList、LinkedList的subList