java if没有大括号_性能 - Java切换案例:有或没有大括号?

性能 - Java切换案例:有或没有大括号?

考虑以下两个带括号的片段:

switch (var) {

case FOO: {

x = x + 1;

break;

}

case BAR: {

y = y + 1;

break;

}

}

没有括号:

switch (var) {

case FOO:

x = x + 1;

break;

case BAR:

y = y + 1;

break;

}

我知道,在带括号的代码段中,通过将每个案例括在大括号中来创建一个新的范围。 但是,如果每个案例都不需要新的范围(即没有重用变量名称),那么在案例中使用大括号是否存在任何性能损失?

9个解决方案

84 votes

在案例中使用大括号是否有任何性能损失?

没有。

花括号可以帮助编译器找出变量,条件,函数声明等的范围。一旦将代码编译成可执行文件,它就不会影响运行时性能。

MrValdez answered 2019-04-13T12:22:06Z

21 votes

这是过早优化的一个极端例子。 担心哪种方式更容易阅读和调试会更好。

Travis answered 2019-04-13T12:22:32Z

18 votes

从执行的角度来看,没有性能损失。

从编译的角度来看,轻微的性能损失,因为有更多要解析,但如果有人真正关心它,他们将不得不在一行编写他们的代码:-)

现在,对于我们帖子的意见部分...我总是加入{和}因为可维护性会受到惩罚,因为你可能不得不把它们放在以后的日期,这可能是一种痛苦 在以后...但这是103%的个人喜好。

TofuBeer answered 2019-04-13T12:23:22Z

12 votes

我们知道开关盒的支架不是必需的。 使用大括号案例可能会导致对案例范围的混淆。

开括号通常与有意义的东西相关联,如函数的开始或循环的开始或类声明的开始或数组初始化的开始等...我们知道,当遇到中断时,一个案例突破了switch块 声明。 因此,使用花括号似乎意味着对于无知读者的案例的不同范围的想法。 因此,为了更好地编程可读性,最好避免使用花括号。

即当我有类似的东西,

switch(i)

{

case 1 :

{

//do something

}

System.out.println("Hello from 1");

case 2:

....

}

“Hello from 1”被打印出来。 但是大括号的使用可能暗示一个无知的读者,案件以'}'结尾,已经知道在循环,方法等情况下花括号通常表示什么。

就像我们在'C'中有跳转到标签的语句一样,控制只是转移到大小写并继续它的执行。 因此,有了这种理解,在为switch编写case时使用花括号只是一种不好的做法。

从技术上讲,当使用有效语法时,您可以使用额外的一对花括号来包围代码的任何块。 在开关中使用大括号看起来至少对我来说很糟糕,因为它似乎给出了与我上面说过的不同的感觉。

我的建议:避免使用周围的支架来切换机箱。

Real Red. answered 2019-04-13T12:24:44Z

8 votes

有牙套。

切换语句有很多东西可以出错我尽量避免使用它们,即

忘记休息,从而让案件陷入困境

忘记默认情况,从而没有捕获无条件的条件

意外地在case语句之间重用变量,或者更糟糕的是,影响在case语句之间共享变量的变量。

使用大括号是防止在case语句之间有意和无意地共享变量的一种方法

jklp answered 2019-04-13T12:26:09Z

5 votes

这个问题可能会被关闭为“争论性”(BRACE WAR!),但是到底是什么。 我实际上喜欢案件之后的大括号。 对我而言,丑陋的切换语法看起来更像是其他语言结构。 (在这个“案例”中使用大括号不会受到惩罚)

Andy White answered 2019-04-13T12:26:36Z

5 votes

您说可以省略大括号,因为没有重用变量名称。 通过重用变量名,我假设你的意思是声明一个相同类型的新变量。

大括号实际上最有用的是确保您不会错误地在不同的case中重复使用相同的变量。 它们今天没有声明任何变量,但有人会在明天添加它们而没有大括号,代码容易出错。

Miserable Variable answered 2019-04-13T12:27:13Z

3 votes

我不会在支架上使用支架。

switch语句看起来很巴洛克,没有大括号。

开关盒应该很短。 当你需要声明变量时,这表明你做错了。

现在关闭维护一些传统的C代码,其中包含500多行的切换案例......

starblue answered 2019-04-13T12:28:16Z

1 votes

我以前从未想过这件事。 从不需要case子句中的大括号,所以不能真正理解为什么你需要它们。 就个人而言,我不会选择“维护更容易”的想法,这只是垃圾,如果代码有意义并且有记录,它将更容易维护。

没有大括号......语法更少

Gareth Davis answered 2019-04-13T12:29:01Z

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值