这个功能是否会被放入以后的Java版本中?
有人可以解释为什么我不能这样做,就像Java的switch声明的技术方式一样吗?
我正在研究一些需要高度优化的Java代码,因为它将在我的主程序逻辑中的许多点调用的热函数中运行.此代码的一部分涉及将double变量乘以10凸起到任意非负int exponents.一个快速的方式(编辑:但不是最快的,见下面的更新2)获得相乘的值是switch在exponent:
double multiplyByPowerOfTen(final double d, final int exponent) {
switch (exponent) {
case 0:
return d;
case 1:
return d*10;
case 2:
return d*100;
// ... same pattern
case 9:
return d*1000000000;
case 10:
return d*10000000000L;
// ... same pattern with long literals
case 18:
return d*1000000000000000000L;
default:
throw new ParseException("Unhandled power of ten " + power, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
上面注释的省略号表示case int常量继续递增1,因此case上面的代码片段中确实有19 秒.因为我不知道我是否真的需要10一切权力,并case声明 …
java compiler-construction performance assembly switch-statement
我在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值
在上面的例子中,哪个更快,为什么?
我做了一些时间测试,也喜欢读一些文章,这样一个(最后的评论),它看起来像在发布版本,float和double值采取的处理时间相同.
这怎么可能?当float值与double值相比精度更低且更小时,CLR如何在相同的处理时间内获得双倍?
可能重复:
"else if"比"switch()case"快吗?
Java中if/else与switch的相对性能是什么?
我已经在运行中进行编码....当调试器逐步执行case语句时,它会立即跳转到与条件匹配的项,但是当使用if/else指定相同的逻辑时,它会逐步执行每个if语句直到它找到胜利者.case语句是否更有效,或者我的调试器只是优化了一步?(不要担心语法/错误,我在SO中键入它,不知道它是否会编译,它的原理我之后,我不想做它们作为int因为我依稀记得一些关于使用带有整数的偏移的情况)我使用C#,但我对编程语言的一般答案感兴趣.
switch(myObject.GetType()){
case typeof(Car):
//do something
break;
case typeof(Bike):
//do something
break;
case typeof(Unicycle):
//do something
break;
case default:
break;
}
Run Code Online (Sandbox Code Playgroud)
VS
Type myType = myObject.GetType();
if (myType == typeof(Car)){
//do something
}
else if (myType == typeof(Bike)){
//do something
}
else if (myType == typeof(Unicycle)){
//do something
}
else{
}
Run Code Online (Sandbox Code Playgroud) 我在Java字节码中理解LookUpSwitch和TableSwitch有些困难.
如果我理解得很好,LookUpSwitch和TableSwitch都对应于switchJava源代码的声明?为什么一个JAVA语句生成2个不同的字节码?
每个Jasmin文档:
Java的switch语句如何在幕后工作?它如何比较正在使用的变量的值与案例部分中给出的值?它是否使用==或.equals(),或者完全是其他东西?
我主要对前1.7版本感兴趣.
在Java 7中,string对象可以是switch语句的表达式.有人可以从官方文档中解释以下声明吗?
Java编译器通常使用String对象生成比使用链式if-then-else语句更高效的字节码.
我很欣赏任何可以通过switch语句完成的事情都可以通过if else语句来完成.
但是,当有人应该使用开关而不是其他的声明时,是否有风格规则.
给出以下两种方法:
public static int useSwitch(int i) {
switch (i) {
case 0:
return 1;
default:
return 0;
}
}
public static int useIf(int i) {
if (i == 0)
return 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
测试显示,switch执行速度比if版本快一点(我的机器每次调用1.4纳秒).
我一直认为开关的好处没有开始,直到至少有几个ifs可以避免,
为什么switch比单一的更快if?