我有以下伪代码,如果tree是binaryTree的实例,我需要更新计数器值。如果树有更多的孩子,我会递归地调用这个方法。增加柜台。
问题是如果我使计数器静止(我不想),计数器值很好但是当我将变量作为输入传递给方法时(如下所述)我只是得到了值这有什么问题?
//Pseudo code
public static int test(tree) {
Integer count = 0;
return testTreeRecCounts(tree, count);
}
private static Integer testTreeRecursiveCounts(tree, Integer count) {
if (tree instanceof binaryTree) {
count++;
for (Node node :tree.getChild())) {
testTreeRecursiveCounts((tree)node, count);
}
}
return count;
}
答案 0 :(得分:5)
问题是Integer
不可变,所以当您执行此操作count++
时,count
将指向不同的对象。
过程是:count - >拆箱 - >将值增加1 - >;自动装箱(创建一个新对象)。
这就是为什么,只有第一个值为1的对象才会返回。
另请注意,使用Integer
而不是原始int
会降低性能,因为它需要连续进行自动装箱/取消装箱。
可以通过执行以下操作来解决此问题:
private static int testTreeRecursiveCounts(tree) {
int count =0;
if (tree instanceof binaryTree) {
count++;
for (Node node :tree.getChild())) {
count += testTreeRecursiveCounts((tree)node);
}
}
return count;
}