1. ホーム
  2. java

[解決済み] スイッチの大文字小文字の順序は速度に影響しますか?重複

2023-07-16 16:47:02

質問

ググってみたのですが、ダメでした。

私は非常に大きなスイッチを持っていて、いくつかのケースは 明らかにより一般的な です。

ですから、私は、順序が本当にそのまま保持され、"upper" ケースが "lower" よりも先にテストされ、したがって速く評価されるのかを知りたいのです。

私は順番を維持したいのですが、もし速度が損なわれるのであれば、枝の順番を変更するのが良いでしょう。

説明のために

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

どのように解決するのですか?

switch文の順番を入れ替えても効果がありません。

Javaのバイトコード仕様を見てみると switch にコンパイルすることができます。 lookupswitch または tableswitch 命令で int . A lookupswitch は常に可能な値をソートした状態でコンパイルされるので、 コード中で定数を並べ替えても問題ありません。 tableswitch は指定されたオフセットに対して可能なジャンプの配列を持っているだけなので、これも元の順序を気にすることはありません。

参照 http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.lookupswitch および http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.tableswitch をご覧ください。