按值传递和按引用传递详解

按值传递

 public static void main(String[] args) {
        int i = 10;
        template(i);
        System.out.println(i);
    }
    public static void template(int i) {
        i = 20;
    }

以上述代码为例,按值传递在方法调用时,传递的参数是按值的拷贝传递,在mian方法中的参数i为实参,在template方法中i为形参,与变量名无关,不要混淆。

在执行main方法时在内存中会创建一个i的内存空间地址,i的值传给template后就互不相关了,因为在template中也同样创建了一个i=20的内存空间地址,两者指向的空间地址不同,在main方法中再输出i仍然是用的i=10的值。

按引用传递

public static void main(String[] args) {
        int[] x = {1, 2, 3};
        template(x);
        System.out.println(x[0]);
    }

    public static void template(int[] a) {
    a[0]=20;
}

按引用传递时实参传递给形参的并不是数据,而是数据的地址,main所指向的内存空间地址。形参和实参将会指向同一内存地址。如何理解呢?template方法他就是个方法,他要对main干点什么,对数组的操作,数组在哪?在main给我传递的内存地址中,我要根据这个地址去找,再对main中数组的值进行修改。

时按引用传递的主要形式为①接口 ②类 ③数组。在按值传递过程中,基本数据类型 short int long float double char byte boolean按值传递调用函数并不会改变在原函数中的值。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值