2015-05-13 74 views
-2

我想問你是否知道下面的代碼會給拋出異常。Java字節到int自動轉換

byte b = 50; 
b = b * 2; 

Java在求解方程式之前將字節轉換爲int。然後b的定義會給出例外。

+0

和你的問題? – RE350

+1

答案在你的問題*在解決方程式之前,Java將字節轉換爲int * –

+0

我知道我對自己的問題有所回答。但恕我直言,這是不好的,具有+256範圍的字節將給ClassCastException。這應該是程序員的問題,以正確的方式投射數字,就像在C++中一樣。 Java中有沒有任何選項可以在需要解決方程式時禁用自動轉換爲int? –

回答

4

爲了使代碼拋出ClassCastException代碼需要編譯。此代碼,在另一方面,將不編譯爲-IS,因爲第二線將觸發一個錯誤:

error: incompatible types: possible lossy conversion from int to byte

這是因爲乘法產生一個int

如果更換複合賦值的分配,錯誤就會消失:

b *= 2; // This compiles and runs correctly 
+0

好的。很好,快速解決方案。但我在想,字節,char,int,float等是Java原語。就像在C/C++中一樣。你可以重寫字節類,使b = b * 2;會給出正確的代碼?我知道你可以在C++中做這樣的事情,但我不知道是否可以使用override +, - ,*,%方法覆蓋Java基元類型? –

+0

@MichałStankiewicz不,Java不支持操作符覆蓋,即使是用戶定義的類型,更不用說原始類型。如果你想隱藏這個強制轉換,寫一個方法(比如'static byte mult(byte a,int k)')可以幫助隱藏這個強制轉換。 – dasblinkenlight

+0

好的。 Ty爲你的答案。在工作中,我使用了面向對象,我從不想知道如何簡單地再次演繹,Ty再次獲得幫助。 –