开关箱顺序影响速度吗?

我试过谷歌搜索这个,但没找到。

我有一个非常大的开关,有些案件是 显然更常见比其他。

因此,我想知道的顺序是否真的持有,因为它是和“上”的情况得到测试之前的“下”,因此被评估得更快。

我想保持我的订单,但如果这样会影响速度,那么重新排列分支机构将是一个好主意。

例如:

switch (mark) {
case Ion.NULL:
return null;


case Ion.BOOLEAN:
return readBoolean();


case Ion.BYTE:
return readByte();


case Ion.CHAR:
return readChar();


case Ion.SHORT:
return readShort();


case Ion.INT:
return readInt();


case Ion.LONG:
return readLong();


case Ion.FLOAT:
return readFloat();


case Ion.DOUBLE:
return readDouble();


case Ion.STRING:
return readString();


case Ion.BOOLEAN_ARRAY:
return readBooleans();


case Ion.BYTE_ARRAY:
return readBytes();


case Ion.CHAR_ARRAY:
return readChars();


case Ion.SHORT_ARRAY:
return readShorts();


case Ion.INT_ARRAY:
return readInts();


case Ion.LONG_ARRAY:
return readLongs();


case Ion.FLOAT_ARRAY:
return readFloats();


case Ion.DOUBLE_ARRAY:
return readDoubles();


case Ion.STRING_ARRAY:
return readStrings();


default:
throw new CorruptedDataException("Invalid mark: " + mark);
}
6079 次浏览

重新排序 switch 语句不会产生任何效果。

查看 Java 字节码规范,可以将 switch编译成 lookupswitchtableswitch指令,并打开 intlookupswitch总是按照排序的顺序编译可能的值,所以重新排序代码中的常量不会有什么影响,而 tableswitch只有一个相对于指定偏移量的可能跳转的数组,所以它也从不关心原始顺序。

详情请参阅 http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.lookupswitchhttp://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.tableswitch