0

在下面的代码node中被重用了。现在可以保持原样还是建议创建一个新的引用变量 say nodePopped

  public void preOrder(TreeNode node) {   
        final Stack<TreeNode> stack = new Stack<TreeNode>();
        do {
            System.out.println(node.item);

            while (node != null) {
                stack.push(node.left); // just like a function call
            }

            node = stack.pop();   // OR TreeNode nodePopped = stack.pop() ? 
            if (node.right != null) {
                stack.add(node);
            }

        } while (!stack.isEmpty());
    }

如果代码有错误请忽略,请仅关注已提出的问题。谢谢。

4

2 回答 2

7

"Is it recommended to reuse reference variables or to prevent reuse?"-- 建议编写干净、可理解、可重用的代码。

  • 在逻辑上使用局部变量时使用局部变量,在使用时使用更高范围的变量。
  • 使用尽可能有限范围的局部变量可能是一件好事,因为当它们声明的块超出范围时它们会被清理。
  • 尽管对于它们引用的对象而言并非总是如此,因为变量!=对象。确保您完全理解引用变量与引用或对象之间的区别。
  • 不要担心过早的优化。
  • 但是要分析时间关键代码。
  • 最担心别人是否会理解你的代码,或者更重要的是你未来的自己是否会在一年后理解你的代码。
于 2013-09-28T02:39:07.943 回答
0

我自己的感觉是,如果我正在查看由其他人编写的具有参数的函数,无论出于何种原因,我首先向下看函数的底部并查看使用的参数,我倾向于假设该参数底部将是传递给函数的参数。因此,如果有一个语句在中间某处分配给参数的参数(当然,这不会更改实际参数,而是以参数值开头的临时变量),它可以是令人困惑。出于这个原因,我的偏好是在这种情况下声明一个局部变量(比如nodePopped)。这部分是样式问题,但我发现它对我有用,而且我过去在修改参数时阅读其他人的代码时遇到了问题。

于 2013-09-28T02:48:27.257 回答