![](/img/trans.png)
[英]Maximum size of an array - Type mismatch: cannot convert from long to int
[英]Type mismatch: cannot convert from long to int
我有以下幾行代碼
long longnum = 555L;
int intnum = 5;
intnum+=longnum;
intnum= intnum+longnum; //Type mismatch: cannot convert from long to int
System.out.println("value of intnum is: "+intnum);
我認為第 3 行和第 4 行執行相同的任務,那么為什么編譯器在第 4 行顯示錯誤“類型不匹配:無法從 long 轉換為 int”
請幫忙。
那是因為復合賦值運算符進行了隱式轉換。
來自JLS 復合賦值運算符:
E1 op= E2
形式的復合賦值表達式等價於E1 = (T) ((E1) op (E2))
,其中T
是E1
的類型,只是E1
只計算一次。
而在二進制+
運算符的情況下,您必須明確進行轉換。 做你的第四個任務:
intnum = (int)(intnum+longnum);
它會起作用。 這就是復合賦值表達式的計算結果。
我認為第 3 行和第 4 行執行相同的任務,那么為什么編譯器在第 4 行顯示錯誤“類型不匹配:無法從 long 轉換為 int”
因為他們不做同樣的事情。 復合賦值運算符在其中具有隱式轉換。
E1 op= E2
形式的復合賦值表達式等價於E1 = (T) ((E1) op (E2))
,其中T
是E1
的類型,只是E1
只計算一次。
所以你的第三行更像是:
intnum = (int) (intnum + longnum);
intnum + longnum
是必需的,因為在表達式intnum + longnum
,在long
算術中執行加法之前應用二進制數字提升,結果為long
。 沒有從long
到int
隱式轉換,因此是強制轉換。
Long id = 50;
Integer sum = Integer.valueOf(Long.toString(id));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.