次のようなことをしようとすると、エラーが発生します。
byte a = 23;
a = a - 1;
コンパイラは次のエラーを返します: Test.java:8: 精度が失われる可能性があります: int required: byte a = a - 1; ^ 1 エラー
キャストしてもエラーが解決されない...なぜコンパイラがそれをさせてくれないのですか? 変数 'a' を int に変換する必要がありますか?
このようにしてください。
a = (byte)(a - 1);
a
その整数値から 1 を引くと。したがって、結果をバイト単位で割り当てるには、明示的な型キャストを行う必要があります。
Java数学では、すべてが計算の前に少なくともint
前にプロモートされます。これは、2進数プロモーション(JLS 5.6.2)と呼ばれます。そのため、コンパイラはを見つけましたint
。これを解決するには、式全体の結果を次のようにキャストしbyte
ます。
a = (byte) (a - 1);
a = a - 1;
//ここで、減算の前にaはintデータ型にプロモートされ、「a-1」の結果はintになります。これは、バイトとして格納できません(byte=8bitsおよびint=32bits)。
そのため、次のようにバイトにキャストする必要があります。
a = (byte) (a - 1);
これを行う:
a -= 1;
明示的なキャストは必要ありません。コンパイラ/JVM がそれを行います。
変数の型を int に変更すると、あなたが提供した情報しかないため、誰も言うことができません。
変数タイプは、それを使用して実行する予定のタスクによって定義されます。
変数 a が誰かの手の指を数える場合、なぜ int を使用するのでしょうか? そのためにはタイプバイトで十分です。