Java引用传递和值传递

值传递

在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制一份传递到函数中,因为实参和形参再内存上是两个独立的变量,所以方法执行中形式参数值的改变不影响实际参数的值。简单来说值传递中传递的参数是值的拷贝。

  • 基本数据类型是值传递

引用传递

在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。实际参数是对象(或数组),这时形参和实参在内存上指向的是同一地址,对形参的改变会影响实参。对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

  • 所有的对象都是引用传递

代码分析

现在有如下代码:

public static void main(String[] args) {
        int a = 2;
        String b = "3";
        int[] arr = new int[]{1,2,3,4};
        Ch ch = new Ch();
        System.out.println("调用方法前主方法中a = "+ a + ",b = " + b);
        System.out.println("调用方法前主方法中arr:"+ Arrays.toString(arr));
        System.out.println("调用方法前主方法中ch.c = "+ ch.c);
        change(a,b,arr,ch);
        System.out.println("调用方法后主方法中a = "+ a + ",b = " + b);
        System.out.println("调用方法后主方法中arr:"+ Arrays.toString(arr));
        System.out.println("调用方法后主方法中ch.c = "+ ch.c);
    }

    public static void change(int a, String b,int[] arr,Ch ch) {
        a = 100;
        b = "200";
        arr[0] = 999;
        arr[1] = 888;
        ch.c = 'Z';
        System.out.println("change方法中a = "+ a + ",b = " + b);
        System.out.println("change方法中arr:"+ Arrays.toString(arr));
        System.out.println("change方法中ch.c = "+ ch.c);
    }

    static class Ch {
        public char c = 'A';
    }

运行结果如下:
在这里插入图片描述
通过代码的运行结果,我们可以看出,通过方法传递后,int类型变量a和String类型的变量b原先的值并没有受到change方法执行后的影响,并输出了原值,而数组arr和类Ch的成员变量经过change方法后值被改变了。此时变量a和变量b的传递就是值传递,而数组arr和类Ch的成员变量的值的传递被改变 ,则为引用传递。

总结

  • 值传递:基本数据类型的传递,对行参的修改不会影响实参
  • 引用传递:引用数据类型的传递,对参数的修改会影响到实际的对象
  • Integer、String、Double等特殊类型的传递,也为值传递
  • 传递的是数组或对象,都为引用传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值