问答题1022/1053java中是值传递引用传递?

难度:
2021-11-02 创建

参考答案:

Java 中的参数传递是 值传递,但理解这一点时需要注意区分 基本数据类型引用数据类型 两种情况。

1. 基本数据类型(如 intcharfloat 等):

当你将一个基本数据类型的变量作为参数传递给方法时,传递的是该值的副本。方法内对该副本的修改不会影响原始变量的值。

1public class Test { 2 public static void main(String[] args) { 3 int a = 10; 4 modifyValue(a); 5 System.out.println(a); // 输出 10 6 } 7 8 public static void modifyValue(int a) { 9 a = 20; 10 } 11}

在上面的例子中,a 的值在 modifyValue 方法中被修改为 20,但因为是值传递,main 方法中的 a 依然保持为 10

2. 引用数据类型(如对象、数组等):

当你将一个引用数据类型的变量作为参数传递时,传递的是该对象的 引用 的副本。这个副本指向与原始引用相同的对象。因此,在方法中对对象的修改会影响原始对象。但如果修改引用本身(例如,指向不同的对象),则不会影响原始引用变量。

1public class Test { 2 public static void main(String[] args) { 3 Person p = new Person("John"); 4 modifyPerson(p); 5 System.out.println(p.name); // 输出 "Jane" 6 } 7 8 public static void modifyPerson(Person p) { 9 p.name = "Jane"; // 修改对象的属性 10 } 11} 12 13class Person { 14 String name; 15 16 Person(String name) { 17 this.name = name; 18 } 19}

在这个例子中,p 是一个引用类型变量,传递给 modifyPerson 方法时,传递的是对象的引用副本。因此,在方法中修改 p.name 会影响 main 方法中的对象。

但是,如果在方法中重新赋值给 p,它会指向一个新的对象,而不会影响 main 中的 p 引用:

1public static void modifyPerson(Person p) { 2 p = new Person("Alice"); // 重新赋值,p 指向了新的对象 3}

这段代码中的 p 只会影响方法中的局部变量 p,原始的 p 引用(在 main 中)不会受到影响。

最近更新时间:2024-12-09