2

OK、Java 6 の時点では、y リテラル サフィックスはありません。次のコードを検討してください。

byte b = some_byte();
switch (b) {
    case (byte) 0x80: ...
    case (byte) 0x81: ...

そしてこの代替:

int b = some_byte() & 0xff;
switch (b) {
    case 0x80: ...
    case 0x81: ...

どちらを使用しますか? 最初のケースでは、(バイト) キャストは実行時またはコンパイル時に実行されますか? ありがとう。

4

2 に答える 2

6

どちらを使用しますか?

おそらく後者です。簡単にするためですが、何が起こっているのかを説明するコメントが付いています。

最初のケースでは、(バイト) キャストは実行時またはコンパイル時に実行されますか?

コンパイル時。いずれにせよ、ケースの値はコンパイル時の定数でなければならないことを忘れないでください。

もう 1 つのオプションは、これらの定数を作成することです。private static final byte FOO = (byte) 0x80; プライベート静的最終バイト BAR = (バイト) 0x81;

...

switch (someByte()) {
    case FOO:
    case BAR:
        ...
}

他のことは別として、それは値の「魔法」を少なくします。

または、列挙型を使用することもできます...

于 2012-08-21T13:32:58.747 に答える
1

2番目のケースでは、

some_byte() & 0xff;

2命令追加。残りは同じです。あなたはそれをチェックすることができます

javap -c Test

ここで、Test はテスト クラスの名前です。

于 2012-08-21T14:05:05.610 に答える