小编典典

开关盒顺序是否会影响速度?

java

我试图用谷歌搜索,但是没有运气。

我的开关很大,有些情况 显然 比其他情况 更常见

因此,我想知道订单是否真正保持原状,并且在“下”之前先测试“上”案例,因此可以更快地进行评估。

我想保留订单,但是如果它影响速度,那么重新排序分支将是一个好主意。

例如:

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);
    }

阅读 221

收藏
2020-10-09

共1个答案

小编典典

对switch语句重新排序没有任何效果。

查看Java字节码规范,switch可以将a编译为a lookupswitch或一条tableswitch指令,然后打开a int。A
lookupswitch总是以可能的值以已排序的顺序进行编译,因此对代码中的常数进行重新排序将无关紧要,而tableswitchjust则具有相对于指定偏移量的可能跳转数组,因此,它也不必关心原始顺序。

请参阅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了解详情。

2020-10-09