在 Java 中,参数传递的方式分为 值传递(Pass by Value) 和 引用传递(Pass by Reference)。Java 中只有 值传递,但可以通过值传递的方式传递对象的引用。
- 值传递(Pass by Value):
- 值传递是指将实际参数的 值 复制一份传递给方法的形式参数。
- 对于基本数据类型(如
int
、char
、boolean
等),传递的是实际值的副本。 - 在方法内部对形式参数的修改不会影响实际参数的值。
- 示例:
public class ValuePassExample { public static void modifyValue(int value) { value = 100; // 修改的是副本,不影响原始值 } public static void main(String[] args) { int originalValue = 50; modifyValue(originalValue); System.out.println("原始值: " + originalValue); // 输出: 原始值: 50 } }
- 引用传递(Pass by Reference):
- Java 中没有真正的引用传递,但可以通过值传递的方式传递对象的引用。
- 对于对象类型(如数组、类实例等),传递的是对象引用的副本(即内存地址的副本)。
- 在方法内部对对象属性的修改会影响原始对象,因为形式参数和实际参数指向同一个对象。
- 示例:
public class ReferencePassExample { public static void modifyObject(MyObject obj) { obj.value = 100; // 修改的是原始对象的属性 } public static void main(String[] args) { MyObject originalObject = new MyObject(50); modifyObject(originalObject); System.out.println("对象值: " + originalObject.value); // 输出: 对象值: 100 } } class MyObject { int value; MyObject(int value) { this.value = value; } }
总结:
- 值传递:传递的是实际值的副本,适用于基本数据类型。
- 引用传递:Java 中没有真正的引用传递,但可以通过值传递的方式传递对象的引用(即内存地址的副本),适用于对象类型。
- 关键区别:
- 值传递不会影响原始值。
- 引用传递(通过值传递的方式)会影响原始对象的属性,但不会改变引用本身(即不能改变对象指向)。
示例对比:
public class PassExample {
public static void modifyValue(int value) {
value = 100; // 不影响原始值
}
public static void modifyObject(MyObject obj) {
obj.value = 100; // 影响原始对象的属性
}
public static void main(String[] args) {
int originalValue = 50;
modifyValue(originalValue);
System.out.println("原始值: " + originalValue); // 输出: 原始值: 50
MyObject originalObject = new MyObject(50);
modifyObject(originalObject);
System.out.println("对象值: " + originalObject.value); // 输出: 对象值: 100
}
}
class MyObject {
int value;
MyObject(int value) {
this.value = value;
}
}
THE END
暂无评论内容