Java中向函数传递参数后如何修改对应对象变量的值?
核心问题原因
Java里所有参数传递都是值传递:当你传入对象类型的变量时,实际传递的是这个变量所持有的「对象内存地址引用」的副本。你在方法内给形参x重新赋值x = currentNode,修改的只是这个副本的指向,完全不会影响方法外原变量x的指向,所以最终打印结果还是null。
解决方案
方案1:方法返回需要赋值的对象(最推荐)
直接把修改后的值作为方法返回值,调用时赋值给原变量即可,逻辑清晰无额外开销,是Java场景下的标准实现方式:
public static Node doStuff(Node x, Node currentNode){ if(x == null) return currentNode; return x; // 非空时直接返回原对象 } public static void main(String []args) { Node x = null; Node newNode = new Node(); x = doStuff(x,newNode); // 接收返回值重新赋值给原变量x System.out.println(x); // 此时输出不为null }
方案2:用容器包装原变量
如果需要在方法内修改多个外部变量,可以用长度为1的数组作为包装容器,数组本身的引用副本指向的是同一个数组对象,修改数组元素就会对外部生效:
public static void doStuff(Node[] xArr, Node currentNode){ if(xArr[0] == null) xArr[0] = currentNode; } public static void main(String []args) { Node x = null; Node[] xArr = new Node[]{x}; Node newNode = new Node(); doStuff(xArr, newNode); x = xArr[0]; System.out.println(x); // 输出不为null }
方案3:将原变量设为类的成员变量
如果是类内部的方法调用,也可以把需要修改的变量设为类的成员变量,方法内可以直接修改成员变量的值,不需要额外传参:
public class Test { private static Node x; // 类静态成员变量 public static void doStuff(Node currentNode){ if(x == null) x = currentNode; } public static void main(String []args) { x = null; Node newNode = new Node(); doStuff(newNode); System.out.println(x); // 输出不为null } }
内容的提问来源于stack exchange,提问作者FloydVu0531
相关产品推荐
相关产品推荐

