首页 > 其他分享 >值传递机制

值传递机制

时间:2022-12-10 16:47:48浏览次数:40  
标签:int System 传递 println 机制 data 实参 out

Java值传递机制

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

总结

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
  • 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值

标签:int,System,传递,println,机制,data,实参,out
From: https://www.cnblogs.com/cheyaoyao/p/16971788.html

相关文章