马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

Java参数传递 基本数据类型和引用数据类型(表格对比)

2023-11-28 14:43:19java学习笔记 本文浏览次数:1 百度已收录

本 文 目 录

在Java中,参数传递主要有两种方式:基本数据类型和引用数据类型的传递。这两种方式在传递过程中有不同的特性,如下表所示:

1、基本数据类型和引用数据类型参数对比

对比项 基本数据类型 引用数据类型
参数传递方式 值传递 值传递(传递的是引用)
是否改变原始数据 不会改变原始数据 可能改变原始数据(通过引用的方式)
传递的内容 数据的副本 对象在内存中的地址(引用)
示例类型 int, float, char等 自定义对象,数组,集合等

让我们通过两个代码示例来更深入地了解这两种参数传递方式的区别。

2、基本数据类型的参数传递

public class Example1 {
    public static void main(String[] args) {
        int a = 10;
        System.out.println("Before method call: " + a); // 输出:Before method call: 10
        changeValue(a);
        System.out.println("After method call: " + a); // 输出:After method call: 10
    }

    public static void changeValue(int num) {
        num = 5;
        System.out.println("Inside method: " + num); // 输出:Inside method: 5
    }
}

步骤解释:

  1. main方法中,我们定义了一个整数a并赋值为10。

  2. 然后我们调用changeValue方法,并将a作为参数传递。注意,这里传递的是a的副本。

  3. changeValue方法中,我们尝试修改num的值。然而,这并不会影响到main方法中的a,因为num只是a的一个副本。

  4. 最后,我们在main方法中打印a的值,发现它仍然是10,说明原始数据没有改变。

3、引用数据类型的参数传递

public class Example2 {
    static class MutableObject {
        int value;
        public MutableObject(int value) { this.value = value; }
    }

    public static void main(String[] args) {
        MutableObject obj = new MutableObject(10);
        System.out.println("Before method call: " + obj.value); // 输出:Before method call: 10
        changeValue(obj);
        System.out.println("After method call: " + obj.value); // 输出:After method call: 5
    }

    public static void changeValue(MutableObject obj) {
        obj.value = 5;
        System.out.println("Inside method: " + obj.value); // 输出:Inside method: 5
    }
}

步骤解释:

  1. main方法中,我们定义了一个自定义对象obj并赋值为10。这个对象是可变的。

  2. 然后我们调用changeValue方法,并将obj作为参数传递。注意,这里传递的是obj的引用。

  3. changeValue方法中,我们通过引用修改了对象的值。这会影响到main方法中的obj,因为我们是通过引用来访问同一个对象的。

  4. 最后,我们在main方法中打印obj.value的值,发现它现在是5,说明原始数据已经被改变。