怎样正确修改Java形参的引用

额,回答跟本题关系不大,只是提供一个思路(我不知道你的treenode是怎么可以初始化的,所以只讲原理,你自己参照着做就好了),如果形参不是基本数据类型的时候传的是实参的引用 public static void main(String args) { List\u0026lt;Integer\u0026gt; is = new ArrayList\u0026lt;Integer\u0026gt;(); is.add(1); is.add(2); is.add(3); is.add(4); System.out.println(is.toString()); // System.out.println(new Test().getLeaves(is)); // System.out.println(is.toString()); // } private List\u0026lt;Integer\u0026gt; getLeaves(List\u0026lt;Integer\u0026gt; newIs) { newIs= new ArrayList\u0026lt;Integer\u0026gt;(); newIs.add(1456); return newIs; }我这段代码中就是把is的内存地址传到方法中让newIs引用,这时候不管是newIs = null还是像例子中一样都是切断newIs与原内存地址的联系,对is和is所引用的内存没有任何影响,所以这时候原来的is并没有改变private List\u0026lt;Integer\u0026gt; getLeaves(List\u0026lt;Integer\u0026gt; newIs) { newIs.set(2, 111); return newIs; }但是如果你这样,此时改的就是newIs所引用的那个内存地址中集合的第三个值,这个集合也是is引用的那个集合,这个时候is就改变了,所以要实现你说的要求的话在集合中使用newIs.removeAll(newIs);将is和newIs共同引用的那个内存中的对象清空就好了(我暂时无法实现将内存中的对象改为null,所以我也不知道怎么把is变成null,只能清空)这个是针对list的实现方式,你可以参照一下实现你需要的效果


    推荐阅读