1

この Java コード

public class test{
   public static void main(String[] args){
      byte[] a = new byte[1];
      a[0] = 1;
      byte x = 1;
      x = x + a[0];
      System.out.println(x);
  }
}

次のコンパイル エラーをスローします。

test.java:10: possible loss of precision
found   : int
required: byte
    byte y = x + a[0];
               ^
1 error

は?ここで何が起こっているのですか?すべての変数はバイトとして宣言されます。1 をバイトに明示的にキャストしても違いはありません。ただし、に変更

public class test{
   public static void main(String[] args){
      byte[] a = new byte[1];
      a[0] = 1;
      byte x = 1;
      x += a[0];
      System.out.println(x);
  }
}

すべてが正常にコンパイルされます。Java バージョン 1.6.0_16、build-b01 でコンパイルしています。私の質問は次のとおりです。これはバグですか、それとも機能ですか? += のパフォーマンスが + と異なるのはなぜですか?

4

3 に答える 3

2

最初のケースでは、結果は int です。そのため、明示的にバイトにキャストする必要があります。ただし、2 番目のケースでは、Java は値を自動的にバイトに変換します。したがって、キャストは必要なく、例外もありません。

于 2013-09-25T14:21:37.003 に答える