1

私はこのようなJavaコードを試しています

class Test {
public static void main (String [] args){
    byte b = 10;
    b = b + 10;
}

}

コンパイルしようとしたときに保存した後、エラーが発生します

D:\java\Test.java:4: possible loss of precision

見つかった:intが必要:バイトb = b + 10; ^1エラー

しかし、このようなことを試してみればありません

b++;
b+=10;

これの理由は何ですか?

4

2 に答える 2

2

元のコードを次のように記述する必要があります

b = (byte)(b + 10);

問題はb + 10、バイトが int に拡張されるため、int 型であることです。

この理由は、b がたとえば 120 の場合、概念的なあいまいさがあるためです。b+10 は 130 に等しいのでしょうか、それとも -126 に等しいのでしょうか?

Java 設計者は、この場合、120+10 が 130 になるように、加算を int で実行する必要があると判断しました。その場合、バイトに格納できません。

についてb+=10は、bを変更したいのは明らかなので、バイトの追加です。

于 2012-04-25T07:38:43.180 に答える
1

possible loss of precisionコンパイラは10 を追加した後にサイズbの制限を超える可能byte性があると考えているためですが、使用するb++b+=10単に追加するだけ10typcastingbなく、 の値が制限を超えていないことをコンパイラレベルで確認するために自動的byteに追加されますサイズの。

于 2012-04-25T07:38:40.687 に答える