Java的值传递和引用传递

值传递不会改变本身,引用传递(如果传递的值需要实例化到堆里)如果发生修改了会改变本身。

1.基本数据类型都是值传递

package com.example.basic;

public class Test {
    public static void main(String[] args) {
        int a=10;
        modify(a);
        System.out.printf("\n方法main中的a等于%d",a);输出:方法main中的a等于10
    }

    public static void modify(int a){
        a=20;
        System.out.printf("方法modify中的a等于%d",a);输出:方法modify中的a等于20
    }
}

 栈里保存的是变量和方法,堆里保存的是具体实例化的对象

原理:

两个a都保存在栈中,没有交集,互不影响,所以不会发生改变

2.如果传递的是一个需要实例化的对象,就是引用传递

package com.example.basic;

public class Test {
    public static void main(String[] args) {
        int[] a={1,2,3};
        modify(a);
        System.out.println("方法main中的a[1]:"+a[1]);输出:方法main中的a[1]:88
    }

    public static void modify(int[] a){
        a[1]=88;
        System.out.println("方法modify中的a[1]:"+a[1]);输出:方法modify中的a[1]:88
    }
}

原理

数组在栈里申明了,但具体数据是保存在堆中,栈中保存的是具体数据的内存引用地址,a和a[1]是同一个内存地址,所以了修改a[1]了,会改动到a。

面试时怎么回答:

值传递不会改变本身,基本数据类型都是值传递(String也这样,括号里不用说)。当发生引用传递,并且传递的值会实例化到JVM的堆中,如果在传递的过程中,改动到了传递的值,由于传递的值和本身,指向同一个内存地址,所以它本身会被修改到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值