可能会让你迷惑的一个List例子

public class Main {

	  public static void main(String args[]){
				 
		 
		  Task task=new Task();
		 
		  List list1=new ArrayList();
		  List list2=new ArrayList();
		  List list3=new ArrayList();
		  
		  list1.add("list11");
		  list1.add("list12");
		
		  
		
		  
		  task.setList(list1);
		  list2=task.getList();
		  System.out.println("task.getList()获取的list的size="+task.getList().size());
		  for(int i=0;i<task.getList().size();i++){
			  System.out.println(task.getList().get(i));
		  }
		  System.out.println("list2的size="+list2.size());
		  for(int i=0;i<list2.size();i++){
			  System.out.println(list2.get(i));
		  }
		 task.getList().add("list13");
		 System.out.println("task.getList()获取的list的size="+task.getList().size());
		  for(int i=0;i<task.getList().size();i++){
			  System.out.println(task.getList().get(i));
		  }
		  System.out.println("list2的size="+list2.size());
		  for(int i=0;i<list2.size();i++){
			  System.out.println(list2.get(i));
		  }
		  list3.add("list3");
		  task.setList(list3);
		  System.out.println("task.getList()获取的list的size="+task.getList().size());
		  for(int i=0;i<task.getList().size();i++){
			  System.out.println(task.getList().get(i));
		  }
		  System.out.println("list2的size="+list2.size());
		  for(int i=0;i<list2.size();i++){
			  System.out.println(list2.get(i));
		  }
		  
		  list1.add("list14");
		  System.out.println("list2的size="+list2.size());
         
		  list2=list3;
		  System.out.println("list2的size="+list2.size());
		  list3.add("list32");
		  System.out.println("list2的size="+list2.size());

	  }
}


import java.util.List;

public class Task {
  
    private List list;

	public List getList() {
		return list;
	}

	public void setList(List list) {
		this.list = list;
	}
    
	
     
     
   
}
试着运行上面的代码。关注下list2的变化情况。看明白了没?


上面的例子其实只是说明了一点:将一个List对象赋值给另一个list变量。实际只是相当于将“引用”地址赋给了list变量。这个道理可能谁都明白,至少在书本上看过,但也许放在实际的例子上会犯糊涂了。

比如上面的第一次Task.setList(list1),然后list2=Task.getList();。整个过程其实分为两步骤:第一步:对象task的成员变量list指向了list1指向的地址,第二步,通过list2=Task.getList();,list2也指向了list1的地址。所以三个“List”指向的地址相同,保存的内容也是一样的。然后,Task.setList(list3)后,对象task的成员变量list指向了list3指向的地址了,内容自然也就不和ist1指向的一样。而list2并没有改变。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值