java如何传值
Java 传值机制
Java 中的参数传递机制是按值传递(pass by value)。无论是基本数据类型还是引用类型,传递的都是值的副本。理解这一点对避免编程中的常见错误非常重要。
基本数据类型的传值
基本数据类型(如 int、float、boolean 等)传递的是实际值的副本。方法内对参数的修改不会影响原始变量。

public class Main {
public static void modifyValue(int x) {
x = 10;
}
public static void main(String[] args) {
int num = 5;
modifyValue(num);
System.out.println(num); // 输出 5
}
}
引用类型的传值
引用类型(如对象、数组)传递的是引用的副本,而非对象本身的副本。方法内可以通过引用修改对象的状态,但不能直接修改原始引用指向的对象。
public class Main {
static class Person {
String name;
Person(String name) {
this.name = name;
}
}
public static void modifyPerson(Person p) {
p.name = "Alice"; // 修改对象状态
p = new Person("Bob"); // 不影响原始引用
}
public static void main(String[] args) {
Person person = new Person("John");
modifyPerson(person);
System.out.println(person.name); // 输出 Alice
}
}
数组的传值
数组作为引用类型,其传递机制与对象类似。方法内可以修改数组元素,但不能直接让原始数组引用指向新数组。

public class Main {
public static void modifyArray(int[] arr) {
arr[0] = 100; // 修改数组元素
arr = new int[]{5, 6, 7}; // 不影响原始引用
}
public static void main(String[] args) {
int[] array = {1, 2, 3};
modifyArray(array);
System.out.println(array[0]); // 输出 100
}
}
不可变对象的特殊案例
String 等不可变对象在方法内修改时会创建新对象,原始引用不受影响。
public class Main {
public static void modifyString(String s) {
s = "world";
}
public static void main(String[] args) {
String str = "hello";
modifyString(str);
System.out.println(str); // 输出 hello
}
}
总结
Java 严格采用按值传递机制:
- 基本类型传递值的副本
- 引用类型传递引用的副本
- 方法内可以修改引用对象的状态
- 方法内不能直接改变原始引用指向的对象






