Java的值传递问题

在Java中有引用传递吗?

通过在网上翻阅了众多的资料后,给自己做了以下总结

答:答案是否定的,Java语言的方法调用只支持参数的值传递

  • 追问:你可能会说传入的实参是基本类型的话你能理解,因为形参接收到的值相当于实参值的拷贝,对新参的改变当然不会影响实参;如果实参是引用类型的话就不一样了,你改变形参的属性,那么实参的属性也会跟着变化,这难道不是引用传递吗?

看看加粗的字体,你可能就会突然感觉到好像有什么不对的地方

  • 回答:为什么说引用类型的参数也是值传递,首先最应该弄明白的一点就是,引用类型它向方法传递的值是什么?是地址值。而你纠结它会改变的东西是什么?是属性值。你在方法中通过实参给的地址去操作相应的属性,那实参的属性值当然会被改变,那最终实参传本身值改变了吗?这里说的本身的值是什么,是实参本来指向的地址!

最后再上一段代码就一目了然了

public class Test {
    public static void main(String[] args) throws Exception {
        int[] arr = {1,2,3};
        toZero(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void toZero(int[] newarr){
//        newarr[0] = 0;    // --> arr={0,2,3}
        newarr = new int[]{4,5,6};  // --> arr={1,2,3}
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值