java如何传值
Java中的传值机制
在Java中,所有方法的参数传递都是按值传递(pass by value)。这意味着方法接收的是实际参数的副本,而非原始变量本身。理解这一点对于避免常见的编程错误至关重要。
基本数据类型的传值
对于基本数据类型(如int、double、boolean等),传递的是变量的实际值副本。方法内部对参数的修改不会影响原始变量。

void modifyValue(int x) {
x = 10; // 修改副本,不影响原始变量
}
int num = 5;
modifyValue(num);
System.out.println(num); // 输出:5
对象引用的传值
对于对象类型(如数组、类实例),传递的是对象引用的副本(即内存地址的副本)。方法内部通过引用修改对象属性会影响原始对象,但重新赋值引用不会影响原始引用。

class MyClass {
int value;
}
void modifyObject(MyClass obj) {
obj.value = 10; // 修改对象属性,影响原始对象
obj = new MyClass(); // 重新赋值引用,不影响原始引用
}
MyClass myObj = new MyClass();
myObj.value = 5;
modifyObject(myObj);
System.out.println(myObj.value); // 输出:10
数组的传值
数组作为对象类型,遵循对象引用的传值规则。方法内部修改数组元素会影响原始数组,但重新分配数组不会影响原始引用。
void modifyArray(int[] arr) {
arr[0] = 100; // 修改元素,影响原始数组
arr = new int[]{1, 2, 3}; // 重新分配,不影响原始引用
}
int[] myArray = {1, 2, 3};
modifyArray(myArray);
System.out.println(myArray[0]); // 输出:100
不可变对象的特殊性
对于String等不可变对象,方法内部对引用的重新赋值不会影响原始引用,且无法修改对象内容。
void modifyString(String s) {
s = "new value"; // 重新赋值引用,不影响原始引用
}
String str = "original";
modifyString(str);
System.out.println(str); // 输出:original
总结
- 基本数据类型:传递值的副本,方法内修改不影响原始变量。
- 对象类型:传递引用的副本,方法内修改对象属性会影响原始对象,但重新赋值引用不影响原始引用。
- 不可变对象:行为类似基本数据类型,但本质仍是对象引用传递。






