1. 程式人生 > >Java中集合list的add方法新增的不是值COPY而是地址

Java中集合list的add方法新增的不是值COPY而是地址

測試程式碼如下:

package test;

import java.util.ArrayList;
import java.util.List;

class Point {
int x;
int y;

public Point(int x,int y)
{
this.x = x;
this.y = y;
}

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}

}

public class TestListAdd {
public static void main(String[] args)
{
List<Point> storePointList = new ArrayList<Point>();
Point testPoint = new Point(3,4);
storePointList.add(testPoint);
System.out.println("x = " + storePointList.get(0).getX() + ", y = " + storePointList.get(0).getY());
testPoint.setX(8);
System.out.println("x = " + storePointList.get(0).getX() + ", y = " + storePointList.get(0).getY());
}
}

結果為:

x = 3, y = 4
x = 8, y = 4

也即:

在add進storePointList之後,修改原來的testPoint 中的值,仍將改變storePointList中對應元素的值,可以看出add中()的只是傳地址。

在這一點上和一般的java方法傳參是一致的。一般java傳參傳的同樣是地址。

可以總結出一個規律:在java中凡是對物件(或者說物件名)進行的傳參傳的都是地址。這是在方法體內部通過傳進來的引數更改其下的屬性可行的。