【问题标题】:Why its recommended to use the narrowest scope as possible when declare variables?为什么在声明变量时建议尽可能使用最窄的范围?
【发布时间】:2013-02-20 03:03:00
【问题描述】:

声明Java变量时
为什么建议尽可能使用最窄的范围
就这样

推荐

if (x>3) {
double d = someCalculation();
// ......
System.out.println("...");
} else {
// No use of d
System.out.println("...");
}

不推荐

double d = someCalculation();
if (x>3) {          
// ......
System.out.println("...");
} else {
// No use of d
System.out.println("...");
}

【问题讨论】:

  • 一旦作用域执行,作用域内声明的所有变量都可以进行垃圾回收
  • 更广泛的范围让您更接近全局变量及其所有乐趣/陷阱。

标签: java variables optimization


【解决方案1】:

因为需要它的范围必须声明它,而在不需要的地方它可能是一个不相关的变量。这个问题的答案在于:你为什么要把东西放在与它们无关的地方?我希望你通常不会——至少从你十几岁开始就不会。

想想当年地板上的所有衣服,没有一个妈妈知道哪些是干净的,哪些是脏的。她是把它们都洗干净,还是把它们都扔掉,还是什么?此类技术中的内存管理也是如此。正在使用什么?我可以移动什么?我可以处理什么?等等

在这些情况下保持干净的作用域等有很多好处,除了这只是一件很自然的事情。在某些情况下,范围内的代码片段可以被视为“工作单元”,如果变量(名称+类型)被重用,它还可以防止数据冲突。

【讨论】:

    【解决方案2】:

    更易于阅读、维护和证明程序是正确的。

    不管怎样,this answer 覆盖得很好。

    也尝试搜索“限制变量范围”(sample hit

    【讨论】:

      【解决方案3】:

      因为当你声明一个变量时,它会被创建并在内存中保留一个空间。即使您不使用此变量,也会创建空间。仅在需要时声明变量。

      【讨论】:

        【解决方案4】:

        一旦作用域执行,作用域内声明的所有变量都可以进行垃圾回收,因此如果不再需要这些变量,则必须携带这些变量。

        在您的情况下,只要if(...) {...} 块被执行,d 就有资格获得 GC

        【讨论】:

        • 没有人提到GC所以+1。
        【解决方案5】:

        同样在您的示例中,无论是否需要,您都将执行 someCalculation()。效率不高。

        【讨论】:

          【解决方案6】:

          出于同样的原因,您不会为了得到这个答案而在您的 stackoverflow 个人资料上发布您来自任何国家/地区的电话号码、电子邮件地址和公民身份证号码。您以最简单的方式管理变量,以防止混乱、提高可读性并减少潜在的混乱。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-09-02
            • 1970-01-01
            • 1970-01-01
            • 2014-08-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多