Java传参是值传递还是引用传递?

Java只有值传递!!

一.值传递与引用传递的区别 :

值传递是指在调用函数时,将实际参数的值复制一份传递给函数的形式参数。在函数内部对形式参数的修改不会影响到实际参数。

引用传递是指在调用函数时,将实际参数的地址传递给函数的形式参数。在函数内部对形式参数的修改会直接影响到实际参数。

二.Java 中的“值”对于基本数据类型和引用数据类型有不同的表现形式。

1.基本数据类型(Primitive Types)

值传递:传递的是变量的实际值。
在方法中对参数的修改不会影响原始变量。

public class Main {
    public static void modifyValue(int x) {
        x = 10; // 修改的是副本
    }

    public static void main(String[] args) {
        int a = 5;
        modifyValue(a);
        System.out.println(a); // 输出 5,a 的值未被修改
    }
}

2.引用数据类型(Reference Types)

值传递:传递的是对象引用的副本(即内存地址的拷贝)。
方法中可以通过引用操作对象的属性或调用方法,但不能改变引用本身(即不能让引用指向新的对象)。

class Person {
    String name;
}

public class Main {
    public static void modifyReference(Person p) {
        p.name = "Alice"; // 修改对象的属性
        p = new Person(); // 创建新对象,不影响外部引用
        p.name = "Bob";
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.name = "John";
        modifyReference(person);
        System.out.println(person.name); // 输出 Alice,而不是 Bob
    }
}

关键点
1.值传递:无论是基本数据类型还是引用数据类型,Java 都是值传递。
2.引用数据类型:虽然传递的是引用的副本,但副本仍然指向同一个对象,因此可以修改对象的状态。
3.引用不可变:在方法中重新赋值引用(如 p = new Person()),不会影响外部的引用变量。

通过理解这些机制,可以更好地设计和调试 Java 程序中的参数传递逻辑。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容