当前位置: 首页 > news >正文

【java】方法的值传递

在 Java 中,方法的值传递 是指将实参的值传递给方法的形参。Java 中只有 值传递,没有引用传递。具体来说:

  • 对于 基本数据类型,传递的是值的副本。

  • 对于 引用数据类型,传递的是引用的副本(即地址的副本)。


1. 基本数据类型的值传递

对于基本数据类型(如 intdoublechar 等),方法传递的是值的副本。修改形参不会影响实参。

例子

java

Copy

public class Main {
    public static void main(String[] args) {
        int a = 10;
        System.out.println("调用方法前: a = " + a); // 输出 10
        changeValue(a); // 传递 a 的值(10)的副本
        System.out.println("调用方法后: a = " + a); // 输出 10(a 的值未改变)
    }

    public static void changeValue(int b) {
        b = 20; // 修改形参 b 的值
        System.out.println("方法内: b = " + b); // 输出 20
    }
}
  • 输出结果

    Copy

    调用方法前: a = 10
    方法内: b = 20
    调用方法后: a = 10
  • 解释

    • a 的值是 10,调用 changeValue(a) 时,传递的是 a 的值的副本(即 10)。

    • 在方法内部修改 b 的值不会影响 a 的值。


2. 引用数据类型的值传递

对于引用数据类型(如数组、对象等),方法传递的是引用的副本(即地址的副本)。修改形参的引用不会影响实参的引用,但修改形参指向的对象内容会影响实参指向的对象内容。

例子

java

Copy

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println("调用方法前: arr[0] = " + arr[0]); // 输出 1
        changeArray(arr); // 传递 arr 的引用的副本
        System.out.println("调用方法后: arr[0] = " + arr[0]); // 输出 100
    }

    public static void changeArray(int[] brr) {
        brr[0] = 100; // 修改形参指向的数组内容
        System.out.println("方法内: brr[0] = " + brr[0]); // 输出 100
    }
}
  • 输出结果

    Copy

    调用方法前: arr[0] = 1
    方法内: brr[0] = 100
    调用方法后: arr[0] = 100
  • 解释

    • arr 是一个数组引用,调用 changeArray(arr) 时,传递的是 arr 的引用的副本(即地址的副本)。

    • brr 和 arr 指向同一个数组对象,因此修改 brr[0] 会影响 arr[0]


3. 值传递的通俗比喻

  • 基本数据类型

    • 就像你复印了一份文件(值的副本),修改复印件不会影响原件。

    • 例如:int a = 10; 传递的是 10 的副本。

  • 引用数据类型

    • 就像你复印了一张银行卡(引用的副本),银行卡指向同一个银行账户。

    • 例如:int[] arr = {1, 2, 3}; 传递的是数组引用的副本,但数组内容共享。


4. 总结

  • Java 中只有值传递

    • 对于基本数据类型,传递的是值的副本。

    • 对于引用数据类型,传递的是引用的副本。

  • 基本数据类型:修改形参不会影响实参。

  • 引用数据类型:修改形参的引用不会影响实参的引用,但修改形参指向的对象内容会影响实参指向的对象内容。

相关文章:

  • 数据守护者:备份文件的重要性及自动化备份实践
  • 《深度Q网络优化:突破高维连续状态空间的束缚》
  • 代码随想录算法营Day39 | 416. 分割等和子集
  • 小火车理论
  • 高血压危险因素分析(项目分享)
  • 计算机基础-内存分配
  • Swift - 引用计数
  • 数电基础总结
  • STM32的HAL库开发---内存保护(MPU)
  • 第二节 字符串、列表
  • 完全数和质数算法详解
  • PHP代驾系统小程序
  • 力扣LeetCode: 1552 两球之间的磁力
  • 【java】基本数据类型和引用数据类型
  • deepseek+即梦一键生成海报
  • 上海正控ZK880 变频器基本操作
  • linux概念详解
  • 机器学习实战(1): 入门——什么是机器学习
  • SpringBoot 笔记
  • 【开源免费】基于SpringBoot+Vue.JS文理医院预约挂号系统(JAVA毕业设计)
  • 精品消费“精”在哪?多在体验上下功夫
  • 著名心血管病学专家李国庆教授逝世,享年63岁
  • 美联储主席:供应冲击或更频繁,将重新评估货币政策方法中的通胀和就业因素
  • 中国青年报:为见义勇为者安排补考,体现了教育的本质目标
  • 警方通报男子广州南站持刀伤人:造成1人受伤,嫌疑人被控制
  • 申论|空间更新结合“青银共生”,助力青年发展型城区建设