取自Think in Java:
赋值使用操作符“=”,它的意思是“取右边的值,把它复制给左边的值”,右值可以是任何常数、变量和表达式,但左值必须是一个明确的已命名的变量。
对基本类型的赋值还是很简单的。基本类型存储了实际的数值,而非指向一个对象的引用(包装类也是如此)。
在遍历包装类型的list时,将遍历出来的值 赋值 给Integer包装类对象,并对对象的值进行改变。结果原list中的Integer对象并未发生改变,list容器中存储的是实际的数值。
在遍历A对象的List,并对A对象中的值进行改变,List中A对象的值也发生了改变,说明在list容器中存储的是A对象的引用。
public class TestRun { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); List<A> Alist = new ArrayList<A>(); for(int i=0;i<10;i++){ list.add(i); Alist.add(new A(i)); } for(A a:Alist){ a.setA(0); } System.out.println("A:"+Alist);//A:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] for(Integer integer:list){ integer+=1; } System.out.println(list);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for(int i=0;i<10;i++){ Integer integer = list.get(i); integer+=1; } System.out.println(list);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Integer[] array = {0,1,2,3,4,5,6,7,8,9}; for(int i=0;i<10;i++){ Integer integer = array[i]; integer+=1; } System.out.println(Arrays.toString(array));//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for(int i=0;i<10;i++){ array[i]+=1; } System.out.println(Arrays.toString(array));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] } } class A{ private Integer a; public int getA() { return a; } public void setA(int a) { this.a = a; } public A(int a) { this.a = a; } @Override public String toString() { // TODO Auto-generated method stub return a.toString(); } }