java 中对象作为方法参数传递是值传递,具体来说是对象引用的副本。调用方法时,系统会将实参对象的内存地址复制一份传给形参,因此形参和实参指向堆中的同一个对象实例。这意味着在方法内部通过形参修改对象的状态(如字段值)会反映到外部,但尝试让形参指向新的对象实例则不会影响外部的实参引用。

Person 对象字段修改对原引用的影响
当方法接收一个 Person 对象并修改其属性时,由于形参和实参指向同一块堆内存,外部变量能观察到这些变化。以下代码演示了这种状态变更的可见性。

public class Main {
public static void main(String[] args) {
Person p = new Person("Alice");
modifyName(p);
System.out.println(p.getName()); // 输出: Bob
}
public static void modifyName(Person person) {
person.setName("Bob");
}
}
class Person {
private String name;
public Person(String name) { this.name = name; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
重新赋值形参对原引用的影响
如果在方法内部将形参指向一个新的对象,这只会改变形参本身的引用指向,而不会改变外部实参的引用。外部变量仍然指向原来的对象实例。
立即学习“Java免费学习笔记(深入)”;

public class Main {
public static void main(String[] args) {
Person p = new Person("Alice");
reassignPerson(p);
System.out.println(p.getName()); // 输出: Alice
}
public static void reassignPerson(Person person) {
person = new Person("Charlie");
}
}
class Person {
private String name;
public Person(String name) { this.name = name; }
public String getName() { return name; }
}
传入 null 引用时的行为
如果传递给方法的对象引用为 null,方法内部无法访问该对象的任何字段或方法,否则会抛出 NullPointerException。此时形参也是 null,对其重新赋值同样不会影响外部的 null 状态,因为只是改变了局部变量的值。


















