nodeDepths(root, depth, depthSum) 并期望中的更新值 depthSum 但每次它把0还给我
nodeDepths(root, depth, depthSum)
depthSum
public static int nodeDepths(BinaryTree root) { Integer depthSum = 0; Integer depth = 0; nodeDepths(root, depth, depthSum); return depthSum; } public static void nodeDepths(BinaryTree root, int depth, Integer depthSum) { depth = depth + 1; depthSum = depthSum + depth; if (root.left == null && root.right == null) { return; } nodeDepths(root.left, depth, depthSum); nodeDepths(root.right, depth, depthSum); }
我没有提到问题场景和逻辑部分,因为这不是一个问题。我面临的问题是 “调用方方法中未更新depthSum引用变量”
你的台词
depthSum = depthSum + 1
depthSum 对象,但本地 深度总和 变量。与任何局部变量更新一样,它不会传播到调用者,因为调用者只知道原始绑定,这就是为什么此调用策略是按值调用的子类型(其中值是对对象的引用)。
深度总和
为了做你想做的事,你需要做如下的事情
depthSum.increment() depthSum.add(1) depthSum.setValue(depthSum.valueOf() + 1)
但不幸的是 Integer 是不可变的,并且不存在这样的方法。不可能使用对象共享调用策略来更新 .
Integer