清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java 基础

    • 简介
    • 第一个 Java 代码
    • 数据类型
    • 变量
    • 进制
    • 导包
    • 输入
    • 数据类型转换
    • 运算符
    • 随机数
    • 流程控制
    • 访问修饰符
    • 面向对象
    • 重载与重写
    • 程序执行流程
    • 方法参数的值传递
    • 多线程
    • Java 常用类
    • 枚举
    • 注解 Annotation
    • 集合
    • 泛型
    • IO
    • 网络编程
    • 反射
    • lambda
    • 类加载
    • 正则表达式
    • 字符集

方法参数的值传递

在 Java 中,方法参数只有值传递,这个值可以是普通类型,也可以是引用类型(地址)。对于普通类型来将,是将形参的值复制给实参,形参不受影响。对于引用类型,是将形参的地址复制给实参,形参可能会收影响。

public class ParamTest1 {

    public static void swap(int x, int y) {
        int temp = x;
        x = y;
        y = temp;
    }

    public static void swap(Param param) {
        int temp = param.x;
        param.x = param.y;
        param.y = temp;
    }

    public static void change(Test test) {
        test.a = 123;
    }
    
    public static void main(String[] args) {
        int a = 1, b = 2;
        swap(a, b);
        System.out.println(a + " " + b); // 1 2
        Param param = new Param();
        swap(param); // 交换成功
        Test test = new Test();
        test.a = 1;
        change(test);
        System.out.println(test.a); // 123
        
        /* ----------------- */
        char[] a = new char[]{'a', 'b', 'c'};
        System.out.println(a); // abc
    }
}

class Test {
    int a = 10;
}
想要编辑此页?
上次更新: 2023/3/18 19:48
贡献者: djf
←程序执行流程多线程→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号