【问题标题】:Where to declare the counter of the most deeply nested loop in Java?Java中嵌套最深的循环的计数器在哪里声明?
【发布时间】:2011-03-04 21:50:41
【问题描述】:

我是 Java 新手,我正在为 android 构建小型学校项目。 如果我有一个嵌套的 for 循环:

for (int i = 0; i <1000; ++i) {
    for (int j = 0; j <1000; ++j)  {
        // .. this code will be executed a 1,000,000 times
    }
}

在外部循环的每次迭代中声明 j 是否会影响性能? 如果是,有什么好的方法来解决它? 这是学校项目,所以我必须编写使用最少内存的代码。 谢谢!

【问题讨论】:

  • 让您的代码保持原样。编译器会处理这样的事情。将“j”拉出内部循环实际上可能会让事情变得更糟

标签: java for-loop nested counter


【解决方案1】:

不,它没有,并且在尽可能有限的范围内声明变量是一种很好的做法 - 它使可读性更清晰。它还可以确保您不会在下一个循环开始时意外使用一个循环结束时的值。

(我个人会警惕有人强迫您使用绝对最小的内存量,而不是专注于可读性和测量重要的优化。)

【讨论】:

  • 感谢您的快速回复!!正是我想知道的!
【解决方案2】:

声明嵌套变量对性能没有影响,实际上建议将变量的使用限制在正确的范围内。这只是有助于避免简单的错误。

【讨论】:

    【解决方案3】:

    现在唯一的方法就是尝试不同的方式。我可以告诉你,它很可能不会是性能问题,通常在它成为已知问题之前你不必担心优化。

    【讨论】:

      【解决方案4】:

      不,它不会影响性能。

      您编写它的方式是最好的方式:始终声明一个变量,使其范围不超过必要的范围。

      并让编译器优化性能。

      【讨论】:

        【解决方案5】:

        分配整数会影响性能。然而,它是如此的小得可笑,以至于我不会费心去做不同的事情。有句名言“过早的优化是万恶之源”。

        编辑:在 Jon 发表评论后使用 System.nanoTime() 对其进行了测试。无论您是否“预先声明”它,都没有一点区别。所以我认为有任何影响是错误的。

        【讨论】:

        • 整数不会在每次外循环迭代中“分配”。进入方法时,堆栈帧将为两个变量分配足够的空间。 (我同意,如果有任何性能差异,它可能仍然不值得担心,但重要的是要了解您的第一句话是不正确的。适当编辑,我将删除不赞成票: )
        • @Jon 我不知道!干杯。
        • @Jon 保留反对票。它清楚地表明第一句话是一个误解。现在我对学习 JVM 和编译器内部结构产生了兴趣。
        猜你喜欢
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 2020-10-30
        • 2012-12-01
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多