Java引用与地址盲点
2013-04-17 23:46 Polarisary 阅读(344) 评论(0) 编辑 收藏 举报一直以为Java中引用和地址是一个概念,容易混淆,下面的小程序让我加深了对引用的理解。
public class Test { public static void main(String[] args){ Test t = new Test(); t.amethod(); } public void amethod(){ int i=99; ValHold v = new ValHold(); v.i=30; another(v,i); System.out.println(v.i); } public void another(ValHold v,int i){ i=0; v.i=20; ValHold vh = new ValHold(); v=vh; System.out.println(v.i+" "+i); } class ValHold{ int i = 10; } }
之前以为会打印10 0 \n 10,结果如下:
在amethod()方法调用another()方法的v=vh之前,amethod方法把v的引用的值传给了another方法中的v(其实可以是ValHold类型的任何名称),这样another方法中所有对v的操作都会修改amethod中v的指向的对象。所以第二行打印20,然后v=vh,把v指向了新的地址了(新对象),所以第一行打印10 0,此时amethod中的v和another中的v不是同一个引用,another中的v只在其方法块内是有效的,但amethod中的v仍然指向原来的对象地址。
对象引用变化如下: