我得到當我試圖做somethink這樣的錯誤:字節算術:如何減去一個字節變量?
byte a = 23;
a = a - 1;
編譯器爲這個錯誤: Test.java:8:可能的精度損失發現:整數要求:字節 a = a-1; ^ 1錯誤
鑄造不解決錯誤... 爲什麼編譯器不讓我這樣做? 我是否需要將變量'a'轉換爲int?
我得到當我試圖做somethink這樣的錯誤:字節算術:如何減去一個字節變量?
byte a = 23;
a = a - 1;
編譯器爲這個錯誤: Test.java:8:可能的精度損失發現:整數要求:字節 a = a-1; ^ 1錯誤
鑄造不解決錯誤... 爲什麼編譯器不讓我這樣做? 我是否需要將變量'a'轉換爲int?
這樣做。
a = (byte)(a - 1);
當你從a
減去1時,它的整數值。因此,要在字節中分配結果,您需要進行顯式類型轉換。
謝謝!我在'1'中應用了演員,而不是表達的結果,那是我的錯誤。再次感謝。 – mevqz 2013-03-20 20:08:09
在Java數學中,在計算之前,一切都被提升爲至少一個int
。這被稱爲Binary Numeric Promotion(JLS 5.6.2)。所以這就是編譯器發現int
的原因。要解決此,投整個表達式的結果回byte
:
a = (byte) (a - 1);
a = a - 1;
//這裏之前減法被提升爲int數據類型和結果「A-1」變成INT以致無法以字節存儲(字節= 8位和int = 32位)。
這就是爲什麼你必須將它轉換爲一個字節如下:
a = (byte) (a - 1);
這樣做:
a -= 1;
你甚至不需要明確的轉換器,編譯器/ JVM會做它適合你。
如果您將變量類型更改爲int,那麼只有您提供的信息才能說出來。
變量類型由您打算執行的任務定義。
如果你的變量a指着別人的手指,你爲什麼要用int?類型字節已經足夠了。
這已被問了上百次。見例如http://stackoverflow.com/questions/1660856/promotion-in-java http://stackoverflow.com/questions/927391/why-is-a-cast-required-for-byte-subtraction-in- c/941677 – leonbloy 2013-03-20 20:02:11