2

次のようなことをしようとすると、エラーが発生します。

byte a = 23;
a = a - 1;

コンパイラは次のエラーを返します: Test.java:8: 精度が失われる可能性があります: int required: byte a = a - 1; ^ 1 エラー

キャストしてもエラーが解決されない...なぜコンパイラがそれをさせてくれないのですか? 変数 'a' を int に変換する必要がありますか?

4

4 に答える 4

6

このようにしてください。

a = (byte)(a - 1);

aその整数値から 1 を引くと。したがって、結果をバイト単位で割り当てるには、明示的な型キャストを行う必要があります。

于 2013-03-20T20:00:47.593 に答える
5

Java数学では、すべてが計算の前に少なくともint前にプロモートされます。これは、2進数プロモーション(JLS 5.6.2)と呼ばれます。そのため、コンパイラはを見つけましたint。これを解決するには、式全体の結果を次のようにキャストしbyteます。

a = (byte) (a - 1);
于 2013-03-20T20:02:06.860 に答える
3

a = a - 1;//ここで、減算の前にaはintデータ型にプロモートされ、「a-1」の結果はintになります。これは、バイトとして格納できません(byte=8bitsおよびint=32bits)。

そのため、次のようにバイトにキャストする必要があります。

a = (byte) (a - 1);
于 2013-03-20T20:02:53.617 に答える
1

これを行う:

a -= 1;

明示的なキャストは必要ありません。コンパイラ/JVM がそれを行います。

変数の型を int に変更すると、あなたが提供した情報しかないため、誰も言うことができません。

変数タイプは、それを使用して実行する予定のタスクによって定義されます。

変数 a が誰かの手の指を数える場合、なぜ int を使用するのでしょうか? そのためにはタイプバイトで十分です。

于 2013-03-20T20:08:16.673 に答える