【问题标题】:When to declare a variable when using for loops? [duplicate]使用 for 循环时何时声明变量? [复制]
【发布时间】:2015-12-06 11:03:28
【问题描述】:

我想知道哪一个在内存分配方面更好。我知道在这个规模上这些不会有任何不同,因为创建一个变量会占用很少的内存,但我想习惯于为未来编写更好的方式。

public static void test(Scanner input, int[] arr){
    for (int i = 0; i < 5; i++){
        int age = input.nextInt();
        arr[i] = age;
    }

public static void test(Scanner input, int[] arr){
    int age = null;
    for (int i = 0; i < 5; i++){
        age = input.nextInt();
        arr[i] = age;
    }
}

在 for 循环之前声明变量只会在内存中为我设置的所有值分配一个位置,对吗?但是如果我在 for 循环中声明变量,会分配内存中的 5 个不同位置,还是只分配一个在 for 循环再次运行时将被覆盖的位置?

我还应该声明,变量 age 不会在其他任何地方使用,而是在 for 循环内。

谢谢。

【问题讨论】:

标签: java variables for-loop


【解决方案1】:

不应该有任何区别,所以我的建议是将它限制在所需的范围内(即选项 1) - int age = null; 也有点误导 - 让你读起来就像它是一个指针,即使它不是。 int age = 0; 会更清楚一点。

【讨论】:

    【解决方案2】:

    许多讨论:已经存在:Difference between declaring variables before or in loop?

    还有其他因素: 静态的,全局的。

    一般来说,性能越高,可读性越差,安全性越差

    【讨论】:

      【解决方案3】:

      如果不通过编译器的优化消除性能差异,则根本不会引起注意。 值得注意并且应该考虑到的是代码的可读性。

      在循环前声明变量只会让代码更难阅读,也会污染循环外的命名空间。作为一般经验法则,将变量声明在需要它们的最小范围内。

      【讨论】:

        【解决方案4】:

        不要自己使用临时变量,这个比较好:

        public static void test(Scanner input, int[] arr){
        for (int i = 0; i < 5; i++){
            arr[i] = input.nextInt();
        }
        

        }

        【讨论】:

          【解决方案5】:

          如果变量只在循环内使用,则在循环内声明,以免污染函数的命名空间。

          【讨论】:

            【解决方案6】:

            哪个更好,第一还是第二?

            从性能的角度来看,您必须对其进行衡量。 (在我看来,如果你能测量出差异,编译器就不是很好)。

            从维护的角度来看,首先更好。在尽可能窄的范围内,在同一位置声明和初始化变量。不要在声明和初始化之间留下空隙,也不要污染你不需要的命名空间。

            【讨论】:

            • 在这种特定情况下为真,但这并不能以一般方式回答问题。
            猜你喜欢
            • 2015-11-29
            • 2021-12-22
            • 1970-01-01
            • 2012-08-29
            • 2018-10-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多