class Test1{
public static void main(String[] args) {
List<Integer> list = new  ArrayList<Integer>();
append(list);
System.out.println(list.get(0));
}
public static void append(List list ){
list.add("0042");
}
}
如题;
为何list传入方法append而本身也会改变?不是这是方法中的list会改变而已吗?

解决方案 »

  1.   

    因为传入的是引用的值,指向的是同一个list对象
      

  2.   

    http://topic.csdn.net/u/20111003/20/2c7772b0-386e-41bd-9260-28c7f343cb20.html?42411
      

  3.   

    Java对于对象,传递的是值,也就是一个副本。不过这个副本是对象的引用,可以理解为C中的指针。所以你改变内容是会反映的。但是本质上来说传递的是值。
      

  4.   

    值传递,你在方法里
    list.add("0042");往集合对象添加元素,显然是改变了对象内容,当然对象也就改变了http://blog.csdn.net/niuniu20008/article/details/2953785
      

  5.   

    list是一个引用,指向堆中的一个对象,函数中的 list也是指向这个对象,所以不管是通过哪一个引用来操作对象,都会改变对象。
      

  6.   

    JAVA中复杂结构都是引用类型的,就像C语言中的指针一样。
    要实现“值传递”,可以把append这个函数写成返回list类型的函数,然后它里边定义一个list对象的实例,把接受到的list实例赋值给函数里的list实例,然后修改函数里的list实例,之后,返回函数里的list实例,供需要的语句使用。
      

  7.   

    回复楼上楼主:
       List list=new ArrayList();
      public void show(list){
         list.add("dfdsaf");//在这里传入一个对象的引用,我们拿到的仅仅是这个集合的地址
      当我们对集合进行添加的时候,其实已经通过该地址在堆中对该集合的内容进行了修改
     }
       show(list.get(0));
      public void show(String a){
         //我们在这里对a进行修改操作是不会改变list中list.get(0)值的
        因为在这里的a和list.get(0)虽说值相同,但是它们的地址不同,所以不影响   }