integer是值传递还是引用传递_Java中的“值传递”和“引用传递”

在开始之前,我们先看看值传递和引用传递的定义: 值传递: 指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递: 指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。 看完定义我们再看看下面三个案例: 案例一:
    public static void updateNum(int num) {        num = 22;        System.out.println("updateNum:" + num);    }    public static void main(String[] args) {        int num = 11;        updateNum(num);        System.out.println("main:" + num);    }

结果输出:

updateNum:22main:11

案例二:
    public static void updateUser(User user) {        user.setName("爱看妹妹的凡老弟");        System.out.println("updateUser:" + user);    }    public static void main(String[] args) {        User user = new User();        user.setName("凡老弟");        user.setAge(18);        updateUser(user);        System.out.println("main:" + user);    }

结果输出:

updateUser:User{name='爱看妹妹的凡老弟', age=18}main:User{name='爱看妹妹的凡老弟', age=18}
案例三:
    public static void updateName(String name) {        name = "爱看妹妹凡老弟";        System.out.println("updateName:" + name);    }    public static void main(String[] args) {        String name = "凡老弟";        updateName(name);        System.out.println("main:" + name);    }

结果输出:

updateName:爱看妹妹凡老弟main:凡老弟
   看完案例是否有很多问好?下面一步步用Java内存模型来解析下案例: 案例一解析:

298d2af15943a8ee621def2bb03fe94c.png

在案例一中 输出可以看出基本参数是值传递,uodateNum中num拷贝了main方法中的值;

案例二解析:

3572aaaf6074825b68751babc1772df6.png

案例二中的Java内存模型如上图,指向一个地址值,由此可见对象是引用传递。

案例三解析: 在分析案例三之前我们看下案例三中name 的 hashCode变化:

8621695c41fb53d34e3cd43a00b02ea8.png

输出:

updateName:21183711updateName:-464342267main:21183711

6051cc4ae067f36fa0c92e6c08892fbe.png

案例三中原本updateName中name指向凡老弟,又因为name = "爱看妹妹凡老弟"改变了地址引用。

总的来说,在此之前看了网上很多Java中值传递与引用传递的争论,有人说Java只有值传递,我只能说个人对值传递的理解不同罢了。 无论是值传递还是引用传递,其实都是一种求值策略。其本意考点还是对Java内存模型的理解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值