[英]unexpected behavior in types
我剛剛使用數據類型short
創建了一個簡單的java程序。
該程序如下所示:
class test
{
public static void main(String arg[])
{
short x=1;
short x_square=x*x;
}
}
該程序拋出一個錯誤:
java:6: possible loss of precision
found : int
required: short
編譯器如何創建int
? 在該程序中沒有int
變量,所有變量都聲明為short
。
在算術運算期間,如果它們都不是long
類型,則整數類型在Java中始終被視為int
原語。 小整數類型被提升為int
,操作結果為int
。 因此x*x
是類型轉換為int
並且您嘗試將其分配為short
。 你需要一個明確的強制轉換來short
轉換范圍。
short x_square=(short)(x*x);
如果移位運算符以外的整數運算符至少有一個long類型的操作數,則使用64位精度執行運算,並且數值運算符的結果為long類型。 如果另一個操作數不長,則首先將其擴展(第5.1.5節)以通過數字提升(第5.6節)鍵入long。
否則,操作使用32位精度執行,數值運算符的結果為int類型。 如果任一操作數不是int,則首先將其擴展為通過數字提升鍵入int。
從規格 :
如果移位運算符以外的整數運算符至少有一個long類型的操作數,則使用64位精度執行運算,並且數值運算符的結果為long類型。 如果另一個操作數不長,則首先將其擴展(第5.1.5節)以通過數字提升(第5.6節)鍵入long。
否則,操作使用32位精度執行,數值運算符的結果為int類型。 如果任一操作數不是int,則首先將其擴展為通過數字提升鍵入int。
添加short和short會產生一個int。 如果要將結果存儲在int類型的變量中,則必須強制轉換它。
因為兩個short的乘法在java中返回一個int
。 要消除此錯誤,您需要具有顯式類型轉換:
short x_square=(short)x*x;
或者,您還可以執行以下操作:
short x_square = x;
x_square *= x_square;
嘗試投射它: short x_square=(short)(x*x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.