在看《重构——改善既有代码的设计》吧,关键在于你 getCourses(); 方法的定义中返回的是 Student 类   Courses,而 Courses 正是 list 所指向的值

解决方案 »

  1.   

    String 是final类,不可改变。 你那个根本就没对s的name赋值,你用s.name=xxx试试肯定会变
    List是引用的,获得到之后add肯定size变3
      

  2.   

    就像是你自己说的一样:
    我修改的是anotherList,难道这里的anotherList指向了对象s的ArrayList?—— YesJava数据类型分基本类型和引用类型,所有的对象都是引用类型,anotherList和s.getCourses()获取的list其实都是引用,都指向真实的数据。再深入说,就是对象的内存是分配在堆区的(你可以理解堆区有块内存存储了真实数据)。anotherList是引用,在栈区,指向堆区的真实数据。