Java中c中的指針的概念,但是我在使用中還是碰到過一些問題,如我把一個一個對象A賦值給對象B時,這兩個對象有一個改變,那么另外一個也相應的改變。下面分別談談這可能發(fā)生問題的幾種情況:
<一>從“一個對象到另一個對象的賦值”,如:
Class A = new Class();
Class B = A;
這種情況實際把句柄從一個地方復制到另外一個地方,這種情況下對象B和A實際指向的是同一個句柄,更新B會影響到A,同樣更新A也會影響到B。
<二>把對象作為方法的參數(shù)傳遞到一個方法中。Java方法的參數(shù)傳遞可以分成兩種:一種是值傳遞,這種一般是簡單的數(shù)據(jù)類型,如int,long,double,char這些等;一種類似是c中的引用傳遞,就是把對象作為一個引用傳遞給方法參數(shù),在這種情況下,在方法中把這個傳入的參數(shù)對象改變,那么相應的傳入這個參數(shù)引用的對象也相應的改變。如:
Number A = new Number();
A.num = 9;
test(A);
方法定義:
public void test(Number n){
n.num = 99;
}
那么A的num值會變成99.
<三>;把對象保存在ArrayList中.如果把一個對象保存在一個AyyayList中,如果這個對象再發(fā)生改變,那么在這個ArrayList中保存的對象也會改變,說白了還是兩個還是公用同一個句柄.如:
Number A = new Number();
A.num = 100;
java.util.ArrayList list = new ArrayList();
list.add(A);
A.num = 999;
Number B = (Number)list.get(0);
System.out.println(B.num);
那么輸出為999,對象A的更改影響到了ArrayList中的保存的對象.