【问题标题】:Why are single statement conditions in Java expressed using blocks? [duplicate]为什么 Java 中的单语句条件使用块来表示? [复制]
【发布时间】:2017-07-10 23:33:27
【问题描述】:

假设我有以下代码:

public class Test{
    public static void main(String arguments[]){
        if(true){
            System.out.println("Hello, world!");
        }
    }
}

这样做会更有效率:

public class Test{
    public static void main(String arguments[]){
        if(true) System.out.println("Hello, world!");
    }
}

除了惯例之外,第一种方法更常用吗?

【问题讨论】:

  • 除了惯例之外,第一种方法更常用吗?答:没有
  • 这和性能真的没有任何关系...
  • 为什么你认为一个比另一个更有效率?编译器可以消除两者,因为true 是常量。
  • true 是假设性的,因为只输入文字比为条件定义变量更容易。
  • “这样做会更有效率:”。不,它不会。此外,if (true)(注意:您忘记了( 之前的空格)具有特殊语义。

标签: java performance if-statement


【解决方案1】:

要回答您的问题,不,两种约定之间的效率没有区别,但我强烈建议使用大括号,因为代码看起来会格式化,并且任何程序员(新手到专家)都可以轻松快速浏览您的代码。

此外,大括号还有助于避免很难调试的逻辑错误,方法是确保将条件为真或假时需要执行的所有语句(其他部分)组合在一起。

【讨论】:

    【解决方案2】:

    永远不要省略大括号。 从不。如果我每次看到有人在这里发布一个因省略牙套而被烫伤的问题时都有一分钱,我将有足够的时间吃几顿饭。

    您现在可能知道您的意图是什么,但请等待几个月,再回来看看您是否注意到缺少的大括号。然后你会遇到奇怪的问题,只有条件的第一条语句正在运行,其余的都被执行。 2 次击键(或 1 次,如果你有一个好的 IDE)和你保存的一行不值得在路上潜在的头痛。

    无论如何,保存一行是一种错误的胜利,因为它很少有助于提高可读性。

    【讨论】:

    • 当语句 1. 是一个简单的条件或循环并且 2. 适合一行(我从不写无括号的两行)时,我从不使用大括号。我已经这样做了 20 年了,你不会从我这里得到一分钱。我这样做是因为我认为它更具可读性(这不是懒惰,我什至在不再需要时删除了大括号)。 YMMV。
    • @maaartinus 我认为对于提出这个问题的新程序员来说,“从不”是正确的答案。这就像 gotos:我认为它们可以被滥用的情况比可以正确使用的情况更多,因此新程序员应该避免它们。稍后,一旦他们有了更多的经验,他们就会意识到适合使用它们的边缘场景。我认为两者都有可能助长不良习惯,因此不应立即使用它们。
    【解决方案3】:

    不会更有效率,除了在您第一次输入时非常轻微。编译时间差非常小,完全没有执行时间优势。

    【讨论】:

      【解决方案4】:

      了解其中一个是否更有效的一种可靠方法是分别运行代码片段非常高的次数(可能是百万或更多),然后计算每次运行所花费的平均时间。很可能,您会发现从长远来看,这两条代码每次运行所花费的时间相同,因为这两种代码都会产生相似的字节码,如果不相同的话。

      关于第二部分,其中一个更常见 - 即基于意见。就个人而言,如果它是 if 块之后的单行,我删除括号并将该行拉到 if 块旁边,使其看起来像 if(condition) mystatement;,否则我放括号。

      【讨论】:

        猜你喜欢
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 2014-07-12
        • 2015-05-15
        • 2012-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多