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博主三天打鱼、两天晒网的行为哈哈哈😄

相关推荐

  1. 数组传递

    2024-07-19 20:16:02       52 阅读
  2. 传递引用传递

    2024-07-19 20:16:02       31 阅读
  3. 信号槽对传递参数引用传递参数总结

    2024-07-19 20:16:02       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 20:16:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 20:16:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 20:16:02       62 阅读
  4. Python语言-面向对象

    2024-07-19 20:16:02       72 阅读

热门阅读

  1. ios CCSystem.m

    2024-07-19 20:16:02       18 阅读
  2. MySql的运用

    2024-07-19 20:16:02       20 阅读
  3. 使用 tcpdump 进行网络流量捕获与分析

    2024-07-19 20:16:02       20 阅读
  4. 挂马病毒是什么

    2024-07-19 20:16:02       19 阅读
  5. 深入理解并使用 MySQL 的 SUBSTRING_INDEX 函数

    2024-07-19 20:16:02       20 阅读
  6. 【无标题】

    2024-07-19 20:16:02       21 阅读
  7. z-fighting多视锥方案缺失depth information的思考

    2024-07-19 20:16:02       15 阅读
  8. 代码随想录打卡第二十九天

    2024-07-19 20:16:02       19 阅读
  9. 产品经理的样板

    2024-07-19 20:16:02       14 阅读
  10. 关于二进制和八进制

    2024-07-19 20:16:02       18 阅读
  11. Linux 和 Unix 系统中非常流行文本处理工具awk

    2024-07-19 20:16:02       16 阅读
  12. 专升本-1.0.4(英语)-升本208天-学习成果展示

    2024-07-19 20:16:02       18 阅读
  13. 1818:ATP

    2024-07-19 20:16:02       21 阅读
  14. 使用容器化技术部署淘客返利系统的实践与挑战

    2024-07-19 20:16:02       20 阅读
  15. 【WiFi】DFS Vs ZW-DFS

    2024-07-19 20:16:02       17 阅读