簡體   English   中英

為什么我不能寫ch = ch + 1; 而不是ch ++; 雖然他們有相同的意思

[英]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+1char 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.

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