Java中的方法参数传递始终是值传递,基本类型传递值副本,引用类型传递引用副本,方法内可修改对象状态但无法改变原引用指向,正确理解这一机制可避免常见误区。
Java中的方法参数传递始终是值传递,理解这一点是掌握Java方法调用的关键。很多人误以为对象传递是“引用传递”,其
实不然——传递的只是引用的副本。
在Java中,无论是基本类型还是引用类型,方法传参时都会创建实参的副本。
基本数据类型:传递的是变量的值。方法内对参数的修改不会影响原变量。
例如:int num = 10;
passByValue(num);
// 即使方法内部改变了参数,num仍为10
引用数据类型:传递的是对象引用的值(即地址副本)。方法内可以通过这个引用来修改对象的状态,但不能改变原引用本身指向的位置。
例如:User user = new User("Alice");
modifyUser(user);
// user.getName() 可能变化,但user引用本身没变
如果你想通过方法调用改变对象内容,可以直接调用其 setter 方法或执行实例方法。
常见误区:
void modify(User u) {
u = new User("Bob"); // 原引用不受影响
}
这种写法无法改变外部变量指向。
使用 final 参数防止意外修改引用:
public void process(final List
利用可变参数简化调用:
public void printAll(String... args) { ... }
调用时:printAll("a", "b", "c");
结合泛型提升复用性:
public