日期:2014-05-20  浏览次数:20910 次

将集合用作形参传入一个方法,为什么本身会改变?
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会改变而已吗?

------解决方案--------------------
http://topic.csdn.net/u/20111003/20/2c7772b0-386e-41bd-9260-28c7f343cb20.html?42411
------解决方案--------------------
值传递,你在方法里
list.add("0042");往集合对象添加元素,显然是改变了对象内容,当然对象也就改变了http://blog.csdn.net/niuniu20008/article/details/2953785
------解决方案--------------------
JAVA中复杂结构都是引用类型的,就像C语言中的指针一样。
要实现“值传递”,可以把append这个函数写成返回list类型的函数,然后它里边定义一个list对象的实例,把接受到的list实例赋值给函数里的list实例,然后修改函数里的list实例,之后,返回函数里的list实例,供需要的语句使用。
探讨
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……

------解决方案--------------------
回复楼上楼主:
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)虽说值相同,但是它们的地址不同,所以不影响

}