Java引用与地址盲点

一直以为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仍然指向原来的对象地址。

对象引用变化如下:

转载于:https://www.cnblogs.com/zeng-wei/archive/2013/04/17/3027412.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值