posts - 16,comments - 5,views - 19407

1. 基本数据类型

public class ValueTransferTest {
    public static void main(String[] args) {
        int m = 10;
        int n = 20;

        System.out.println("交换前:");
        System.out.println("m = " + m + ", n = " + n);

        ValueTransferTest test = new ValueTransferTest();
        
        test.swap(m, n);

        System.out.println("交换后:");
        System.out.println("m = " + m + ", n = " + n);
    }

    public void swap(int m, int n) {
        int temp = m;
        m = n;
        n = temp;
    }
}

结果

交换前:
m = 10, n = 20
交换后:
m = 10, n = 20

原因

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
  • 就是说,当在main方法里把实参传递给swap方法后,在swap方法里是交换了m,n的值,但是main方法里的m,n并没有变,因为没有改变main方法中变量存储的数据值
    img

2. 引用数据类型

package com.gzl;

public class ValueTransferTest {
    public static void main(String[] args) {
        Data data = new Data();

        data.m = 10;
        data.n = 20;

        System.out.println("交换前:");
        System.out.println("m = " + data.m + ", n = " + data.n);
        
        ValueTransferTest test = new ValueTransferTest();

        test.swap(data);

        System.out.println("交换后:");
        System.out.println("m = " + data.m + ", n = " + data.n);
    }

    public void swap(Data data) {
        int temp = data.m;
        data.m = data.n;
        data.n = temp;
    }
}

class Data {
    int m;
    int n;
}

结果

交换前:
m = 10, n = 20
交换后:
m = 20, n = 10

原因

  • data变量存储的是Data对象的引用(地址),而m和n保存在对象内,无论是实参data还是形参data,都是指向同一个对象,因此修改的也是同一个对象。
    img

3. 总结

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
  • 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值
posted on   Cheyaoyao  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示