簡體   English   中英

類型不匹配:無法從 long 轉換為 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)) ,其中TE1的類型,只是E1只計算一次。

而在二進制+運算符的情況下,您必須明確進行轉換。 做你的第四個任務:

intnum = (int)(intnum+longnum);

它會起作用。 這就是復合賦值表達式的計算結果。

我認為第 3 行和第 4 行執行相同的任務,那么為什么編譯器在第 4 行顯示錯誤“類型不匹配:無法從 long 轉換為 int”

因為他們不做同樣的事情。 復合賦值運算符在其中具有隱式轉換。

JLS 第 15.26.2 節

E1 op= E2形式的復合賦值表達式等價於E1 = (T) ((E1) op (E2)) ,其中TE1的類型,只是E1只計算一次。

所以你的第三行更像是:

intnum = (int) (intnum + longnum); 

intnum + longnum是必需的,因為在表達式intnum + longnum ,在long算術中執行加法之前應用二進制數字提升,結果為long 沒有從longint隱式轉換,因此是強制轉換。

Long id = 50;
Integer sum = Integer.valueOf(Long.toString(id));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM