参考答案:
Java 中的参数传递是 值传递,但理解这一点时需要注意区分 基本数据类型 和 引用数据类型 两种情况。
int
、char
、float
等):当你将一个基本数据类型的变量作为参数传递给方法时,传递的是该值的副本。方法内对该副本的修改不会影响原始变量的值。
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
。
当你将一个引用数据类型的变量作为参数传递时,传递的是该对象的 引用 的副本。这个副本指向与原始引用相同的对象。因此,在方法中对对象的修改会影响原始对象。但如果修改引用本身(例如,指向不同的对象),则不会影响原始引用变量。
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