java 如何传值
基本数据类型传值
在Java中,基本数据类型(如int、double、char等)通过值传递(Pass by Value)。方法调用时,实际参数的值会被复制一份传递给形式参数,修改形式参数不会影响原始变量。

void modifyValue(int x) {
x = 100; // 修改的是副本
}
public static void main(String[] args) {
int num = 10;
modifyValue(num);
System.out.println(num); // 输出10,原始值未改变
}
对象类型传值
对象类型(如数组、类实例)通过引用传递的副本(Pass by Reference Value)。形式参数接收到的是对象引用的副本,两者指向同一对象。通过引用修改对象属性会影响原始对象,但重新赋值引用不会影响原始引用。

class Person {
String name;
Person(String name) { this.name = name; }
}
void modifyObject(Person p) {
p.name = "Alice"; // 修改对象属性,影响原始对象
p = new Person("Bob"); // 重新赋值引用,不影响原始引用
}
public static void main(String[] args) {
Person person = new Person("John");
modifyObject(person);
System.out.println(person.name); // 输出"Alice"
}
数组传值
数组作为对象类型,行为与对象一致。方法内修改数组元素会影响原始数组,但重新分配数组引用不会影响原始引用。
void modifyArray(int[] arr) {
arr[0] = 99; // 修改元素,影响原始数组
arr = new int[]{1, 2, 3}; // 重新分配引用,不影响原始引用
}
public static void main(String[] args) {
int[] nums = {10, 20, 30};
modifyArray(nums);
System.out.println(nums[0]); // 输出99
}
不可变对象传值
对于String、Integer等不可变类,方法内修改会创建新对象,原始引用保持不变。
void modifyString(String s) {
s = "World"; // 创建新对象,不影响原始引用
}
public static void main(String[] args) {
String str = "Hello";
modifyString(str);
System.out.println(str); // 输出"Hello"
}
总结
- 基本类型:传递值的副本,原始值不受影响。
- 对象类型:传递引用的副本,修改对象属性会影响原始对象,但重新赋值引用不影响原始引用。
- 不可变对象:行为类似基本类型,原始引用不变。






