Java 一行条件语句是否应使用括号?

Java 一行条件语句是否应使用括号?,java,c++,c,Java,C++,C,除了可读性之外,当使用和不使用brakets编写单行循环/条件语句时,在性能或编译时方面是否有任何差异 例如,以下各项之间是否存在任何差异: if (a > 10) a = 0; 及 不,没有区别,编译器将去掉无意义的大括号、换行符等 编译时间将略有不同,但差异如此之小,以至于您在阅读此答案时所损失的时间远远超过了您恢复编译速度所需要的时间。随着计算能力的提高,这一成本会进一步降低,但降低可读性的成本不会降低 简言之,做可读的事情,在任何其他意义上都没有任何有用的区别 当然,它

除了可读性之外,当使用和不使用brakets编写单行循环/条件语句时,在性能或编译时方面是否有任何差异

例如,以下各项之间是否存在任何差异:

if (a > 10) 
    a = 0;


不,没有区别,编译器将去掉无意义的大括号、换行符等

编译时间将略有不同,但差异如此之小,以至于您在阅读此答案时所损失的时间远远超过了您恢复编译速度所需要的时间。随着计算能力的提高,这一成本会进一步降低,但降低可读性的成本不会降低


简言之,做可读的事情,在任何其他意义上都没有任何有用的区别

当然,它们在运行时没有区别。 但是为了维护代码,您当然应该使用第二种方法

我这么说的原因是,假设将来,您需要在
if-else
块中添加更多的行来扩展它们。然后,如果在旧代码中包含了第一种方法,那么在添加新代码之前,必须添加大括号。在第二种情况下,您不需要这样做

因此,将来向第二种方式添加代码要比向第一种方式添加代码容易得多

此外,如果您使用第一种方法,则会在您的
if
之后出现键入错误,例如
分号
,如下所示:-

if (a > 0);
    System.out.println("Hello");

因此,您可以看到您的
Hello
将始终被打印出来。如果在
中附加了
大括号,则可以轻松删除这些错误。如果
中附加了
大括号,则与几个答案相反,编译时的性能差异是有限的,但可以忽略不计。运行时没有任何类型的差异。

机器代码不包含此类大括号。编译后,不再有
{}
。使用最具可读性的表格。

当然,性能没有差别。但引入错误的可能性有所不同:

if (a>10)
  a=0;
如果有人扩展代码并稍后编写

if (a>10)
  a=0;
  printf ("a was reset\n");

由于缺少大括号,因此将始终打印此内容。有些人要求您始终使用大括号来避免此类错误。

这取决于其他编码准则。我看不到 如果开口撑杆始终在一条线上,则放置撑杆时出现问题 它本身。如果开口撑杆位于
If
行的末尾, 然而,我发现在添加内容时很容易忽略。所以 我会选择其中之一:

if ( a > 10 ) {
    a = 0;
}
无论行数多少,或:

if ( a > 10 )
{
    //  several statements...
}
与:

当只有一个语句时。然而,重要的是 所有代码都必须一致。如果您正在处理现有代码 底座使用了几种不同的样式,我总是在新的底座中使用大括号 代码,因为您不能依靠代码样式来确保

如果在那里,它们会在一个非常显眼的位置。

我对这个问题感到惊讶。。。不,完全没有区别。让我回到了基本编程时代,那时使用单字母变量名有速度优势。@Pratik:@JesseGood Oops,我这样标记它,因为这似乎是一个非常基本的编程问题,适用于许多语言级别。我更感兴趣的是这里的下表决器的
注释
。下表决器是由于大括号可以在零时间编译的幻想。@EJP。。是的,那部分是我编辑的。在编译时存在一些差异。@SingerOfTheFall。。嗯,它也将用Java编译。但是,很少有机会同时添加这两个
{
在一个声明之后,对吗?@EJP..我不明白,为什么两个内容相同的答案,得到了不同的反应。同样的内容在
@pbhd的
中得到了2票赞成票。你能告诉我们那会是多少有限吗?@Pratik不,我想我做不到。“可忽略不计”是我最想做的事了ess是免费的?@EJP是的。实际上,内部表示将是一棵树,并且不会有大括号节点。但是大括号将决定它如何构建树,编译器很可能会临时插入缺少的大括号,以便正确构建树。(然而,更可能的是,编译器只是有两个不同的规则,因此大括号不会产生任何影响。)@JamesKanze所以扫描大括号和减少两个额外的结果是免费的?请。@EJP:你浪费了更多的时间指出这一点,这比你在编译效率上得到的要多。但是我会更新答案,让它更清楚。正如我已经说过的,差异“可以忽略不计”,你的评论是毫无意义的。你对c的看法oding样式不是对性能问题的回答,因为性能问题明确地将可读性排除在其范围之外。@EJP它们是选择一种样式或另一种样式的唯一有效理由。它们很重要。(绝对没有性能差异。)我从1976年起一直是一名编译器作者。请收回。你的答案仍然无关紧要。@EJP我编写了许多编译器,但我从未注意到有什么不同。在一种情况下,你减少了一条规则;在另一种情况下,减少了一条规则。根据你如何查找规则,这是可能的(但可能性很小)找到一条规则可能要比找到另一条规则花费更多,但差异可能会有两种。我也从来没有注意到差异:这就是为什么我非常小心地说“有限但可以忽略不计”。唯一可以证明这一点的方法是证明大括号是在零时间编译的。你很清楚它们不是。如果你遇到r一个大括号,你必须推一个新的状态,解析语句,当你遇到结束}时弹出状态。你还必须扫描{和}。如果大括号不在那里,你只需要解析语句。其余的都不在
if ( a > 10 )
{
    //  several statements...
}
if ( a > 10 )
    a = 0;