由于编译器优化,Switch语句通常比等效的if-else-if语句更快(例如本文中描述的).
这种优化实际上如何运作?有没有人有一个很好的解释?
只是想弄清楚如何在Java switch语句中使用多个案例.这是我正在尝试做的一个例子:
switch (variable)
{
case 5..100:
doSomething();
break;
}
Run Code Online (Sandbox Code Playgroud)
与必须做的:
switch (variable)
{
case 5:
case 6:
etc.
case 100:
doSomething();
break;
}
Run Code Online (Sandbox Code Playgroud)
任何想法,如果这可能,或什么是一个好的选择?
我在java中发现很多书说switch语句比if语句更快.但我没有找到说明为什么开关比如果更快的地方.
我有一种情况我必须选择两个中的任何一项我可以使用以下任一方式
switch(item){
case BREAD:
//eat Bread
break;
default:
//leave the restaurant
}
Run Code Online (Sandbox Code Playgroud)
或使用if语句如下
if(item== BREAD){
//eat Bread
}else{
//leave the restaurant
}
Run Code Online (Sandbox Code Playgroud)
考虑项目和BREAD是常量int值
在上面的例子中,哪个更快,为什么?
我正在阅读一些模拟器代码,我反驳了一些奇怪的东西:
switch (reg){
case 'eax':
/* and so on*/
}
Run Code Online (Sandbox Code Playgroud)
这怎么可能?我以为你只能switch在积分类型上.是否有一些宏观技巧在继续?
我对R中的switch语句有点困惑.只需在googling函数中我得到一个例子,如下所示:
switch的一个常见用途是根据函数的一个参数的字符值进行分支.
> centre <- function(x, type) {
+ switch(type,
+ mean = mean(x),
+ median = median(x),
+ trimmed = mean(x, trim = .1))
+ }
> x <- rcauchy(10)
> centre(x, "mean")
[1] 0.8760325
> centre(x, "median")
[1] 0.5360891
> centre(x, "trimmed")
[1] 0.6086504
Run Code Online (Sandbox Code Playgroud)
然而,这似乎只是if为每个指定了一堆语句type
这就是全部switch()吗?有人可以给我更多的例子和更好的应用吗?
我已经在SO上查看了类似于这个问题的各种问答,但还没有找到解决方案.
我所拥有的是一个枚举,它代表了观看电视指南的不同方式......
在NDroid Application类中
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
Run Code Online (Sandbox Code Playgroud)
...当用户更改视图时,事件处理程序int从0-2 接收,我想做这样的事情......
在Android Activity onClick(DialogInterface dialog, int which)事件处理程序中
// 'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Run Code Online (Sandbox Code Playgroud)
我已经习惯了C#enums和select/case语句,这些语句允许类似上面的内容,我知道Java做的事情有所不同,但我无法理解我需要做什么.
我不得不诉诸if陈述吗?可能只有3个选择,所以我可以做到但我想知道如何用Java中的switch-case完成它.
编辑对不起我没有完全扩展这个问题,因为我认为它是一个通用的Java问题.我已经添加了这个问题来进一步解释.
没有任何Android特定的东西,这就是为什么我没有将它标记为Android,但枚举是在Application类和我不想切换的代码中定义的Activity.枚举是静态的,因为我需要从多个活动中访问它.
什么是使用点{和}在一个case声明?通常,无论case语句中有多少行,都会执行所有行.这只是关于旧/新编译器的规则还是有背后的东西?
int a = 0;
switch (a) {
case 0:{
std::cout << "line1\n";
std::cout << "line2\n";
break;
}
}
Run Code Online (Sandbox Code Playgroud)
和
int a = 0;
switch (a) {
case 0:
std::cout << "line1\n";
std::cout << "line2\n";
break;
}
Run Code Online (Sandbox Code Playgroud) 我有一个变量,可以是布尔值false,也可以是整数(包括0).我想把它放在一个switch语句中:
switch(my_var){
case 0:
// Do something
break;
case 1:
// Do something else
break;
case false:
// Some other code
}
Run Code Online (Sandbox Code Playgroud)
在谷歌浏览器的测试中,它似乎工作得很好,但我使用它有点紧张,因为我害怕在某些浏览器中,如果my_var是false,它可能会执行第一种情况0 == false.
我只是想知道JavaScript中是否有任何官方说切换语句将使用严格的比较0 !== false,但我自己找不到任何东西,而且我不确定这是否适用于不同的JavaScript引擎.有人知道switch语句完成的比较是否保证是严格的吗?
javascript comparison types type-conversion switch-statement
我不确定是什么导致了这个问题,但在一个项目中,我正在构建,编译器花费数小时来编译模块.我的代码库总大小为352KB,但没有一个模块超过10KB.我使用的是Native端口,但它非常简单; 我只是Date.now()拿着它.
是否有任何众所周知的会导致elm编译器永远编译?我没有很多依赖项,但我经常使用Html.我真的很感激任何会导致这种情况的提示.
因此事实证明,大型案例表达式将导致优化器花费很长时间,从0.16开始.以下是关于提出问题的Elm-Discuss的讨论,以及讨厌的案例匹配的要点.
我想要冗长并且保留胡萝卜,为什么elm的编译器会采用这种方式进行大小写匹配?这里的底层机器是什么?为什么编译器需要花费超过一个小时来优化案例陈述中的60多个模式匹配?
我有一个关于Java交换机的疯狂问题.
int key = 2;
switch (key) {
case 1:
int value = 1;
break;
case 2:
value = 2;
System.out.println(value);
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
场景1 - 当它key为2时,它成功地将值打印为2.
场景2 - 当我要在其中发表评论value = 2时case 2:,说出该局部变量值可能尚未初始化.
问题:
场景1:如果执行流程没有进入case 1:(当时key = 2),那么它如何知道值变量的类型为int?
场景2:如果编译器知道值变量的类型int,则必须访问.中的int value = 1;表达式case 1:.(声明和初始化).那么为什么sqawrk当我要评论value = 2时case 2:,说本地变量值可能没有被初始化.
switch-statement ×10
java ×4
c ×1
c# ×1
c++ ×1
comparison ×1
constants ×1
declaration ×1
elm ×1
enums ×1
haskell ×1
if-statement ×1
javascript ×1
label ×1
performance ×1
r ×1
scope ×1
syntax ×1
types ×1