15、类与对象(采用图解方式分析方法传入参数的值传递和引用传递)② —— 形参实参

值传递和引用传递


在学习的时候你有没有发现一个问题:为什么调用方法时,传入的参数在调用方法之后,有时候会被改变,有时候却没有变?

一、值传递

对于基本数据类型,传递的是值,调用方法时,形参的改变不会影响实参,相当于把实参的值复制一份。
上例子:

public class Hello{
    public static void main(String args[]) {	
        //a,b为实参: 实际存在的参数
        int a = 10;
        int b = 20;

        arithm s = new arithm();
        //调用方法
        s.swap(a,b);

        System.out.println("实参值:a = " + a + "  b = " + b);
    }
}

class arithm{
    // 类中创建方法:swap用来交换a和b的值
    public void swap(int a, int b){
        //a,b为形式参数: 简单理解就是有效的存活时间就只在这一次swap方法调用中,
        //当swap结束, 形参a,b所占用的内存空间就会被释放
        int temp = a;
        a = b;
        b = temp;
        System.out.println("形参值:a = " + a + "  b = " + b);
    }
}

在这里插入图片描述
结果:
在这里插入图片描述

1、方法调用是在栈空间里面开辟一块新的空间进行,首先进去的是main方法,再到swap方法,从图中可以看出形参的修改和实参是无关的,因为它们所处的空间都不一样,更别提修改实参了。
2、虽然形参和实参的名都是a、b,但是两者是不一样的,不要混淆了。

二、引用传递

引用类型传递的是地址,什么意思呢?拿数组arr[ ]举例,其地址假设是0x0011,作为参数传递过来的就是0x0011,表面它是个值,实质上是个地址,可以通过这个地址指向去影响实参。
上例子:

public class Hello{
    public static void main(String args[]) {
        //定义一个数组
        int arr[] = {0,1,2};

        arithm t = new arithm();
        //调用方法
        t.test(arr);	//学过数组应该知道,数组名代表的是数组所在的内存地址

        for(int i = 0; i < arr.length; i++){
            System.out.print(arr[i] + " ");
        }
    }
}

class arithm{
    public void test(int arr[]){
        //arr是数组(即引用类型),传进来的是地址,对其进行修改,修改的是该地址指向的内容
        arr[0] = 5;
    }
}

在这里插入图片描述

其实很简单的,只要记住基本数据类型传递的是值,不会修改实参;引用数据类型传递的是地址,对形参的修改会导致实参的修改。

本人正在B站跟着韩顺平老师学Java(非广告),所以做个笔记仅供学习,文章虽标为原创,但大体思路是韩顺平老师的授课思路,在此基础上加上了自己的理解,不喜勿喷哦。
各位宝子们如果觉滴还不错的话,可以点个赞 or 收个藏 or 打个赏哦,佛系博主一个。
好久没写文章了,有点生疏,会尽量抽出时间写的😂😂😂希望大家能体谅一个正在考研ing博主三天打鱼、两天晒网的行为哈哈哈😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜安青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值