[英]Why can't I write ch=ch+1; instead of ch++; though they have same meaning
package practicejava;
public class Query {
public static void main(String[] args) {
char ch = 66;
System.out.println("character= " + ch);
ch++;
System.out.println("character = " + ch);
}
}
技術上是ch++;
和ch=ch+1;
是相同但我寫ch=ch+1;
時為什么會出錯ch=ch+1;
而不是ch++;
?
你需要提供演員才能做到這一點:
ch = (char) (ch + 1);
這是因為表達式ch + 1
被提升( upcast )為int
。 為了將此表達式重新分配給char
您需要明確地向下轉換它。
通過ch+1
, char ch
將首先提升為int
,就像((int)ch) + 1
,結果將是一個int
。
當你嘗試將一個int
(32位)分配回char
(16位)時,它可能會失去准確性,你需要明確地執行它ch = (char)(ch + 1);
這稱為二進制數字促銷 :
對某些運算符的操作數執行二進制數字提升:
...
數值類型的加法和減法運算符+和 - (§15.18.2)
它會表演
應用擴展基元轉換(第5.1.2節)來轉換由以下規則指定的一個或兩個操作數:
如果任一操作數的類型為double,則另一個操作數轉換為double。
否則,如果任一操作數的類型為float,則另一個操作數轉換為float。
否則,如果任一操作數的類型為long,則另一個操作數轉換為long。
否則,兩個操作數都將轉換為int類型。
首先,請注意char
是2字節大(16位), int
是32位。
1.輸入ch++
:
要應用++
運算符,沒有類型轉換,但運算符只是使該char
的位表示增加1。 參見JLS11章15.14.2,第575頁:
后綴增量表達式的類型是變量的類型。
2.輸入ch=ch+1
:
ch
首先被轉換為int
,然后它被加1
(仍然是一個int),並且=
實際上是要將具有32位的int
轉換為只有16
位的char
,注意這可能會失去准確性 。 因此,如果沒有顯式轉換,編譯器會抱怨,這是錯誤的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.