Java中c中的指针的概念,但是我在使用中还是碰到过一些问题,如我把一个一个对象A赋值给对象B时,这两个对象有一个改变,那么另外一个也相应的改变。下面分别谈谈这可能发生问题的几种情况:
<一>从“一个对象到另一个对象的赋值”,如:
Class A = new Class();
Class B = A;
这种情况实际把句柄从一个地方复制到另外一个地方,这种情况下对象B和A实际指向的是同一个句柄,更新B会影响到A,同样更新A也会影响到B。
<二>把对象作为方法的参数传递到一个方法中。Java方法的参数传递可以分成两种:一种是值传递,这种一般是简单的数据类型,如int,long,double,char这些等;一种类似是c中的引用传递,就是把对象作为一个引用传递给方法参数,在这种情况下,在方法中把这个传入的参数对象改变,那么相应的传入这个参数引用的对象也相应的改变。如:
Number A = new Number();
A.num = 9;
test(A);
方法定义:
public void test(Number n){
n.num = 99;
}
那么A的num值会变成99.
<三>;把对象保存在ArrayList中.如果把一个对象保存在一个AyyayList中,如果这个对象再发生改变,那么在这个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中的保存的对象.