您的位置:首页 > 编程语言 > Java开发

Java引用与地址盲点

2013-04-17 23:46 148 查看
一直以为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仍然指向原来的对象地址。

对象引用变化如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: