2016-09-28 80 views
2

char數據類型我有以下代碼增量在Java

class arr 
    { 
    public static void main(String a[]) 
    { 
     char c='A'; 
     c+=10; 
     System.out.println(c); 
     } 
    } 

當從Java編譯8,它編譯成功。

outputķ

但是當我編譯下面的代碼:

class arr 
{ 
    public static void main(String a[]) 
    { 
    char c='A'; 
     c=c+10; 
     System.out.println(c); 
    } 
} 

我獲得以下錯誤:

logic.java:6: error: incompatible types: possible lossy conversion from int to char 
    c=c+10; 
    ^

我不明白c=c+10c+=10是同樣的事情又何嘗我收到這樣的錯誤? 請幫幫我。謝謝。

+0

提示:隱式vs顯式類型轉換(它們不完全相同) – SomeJavaGuy

+0

提示:* arr *是一個類的錯誤名稱。它沒有提到類的目的,也沒有啓動UpperCase。 – GhostCat

+0

c =(char)((char)c + 10);這會給你你所期望的。就像在上面的評論中說的,由於類型鑄造編譯錯誤發生 – Karthik

回答

6

編譯器爲您提供了一些不錯的語法糖做char += int

它基本上改變c+=10;c = (char)(c + 10);

然而,c=c+10;沒有隱式轉換,所以它不會編譯。

下面是關於如何工作的oracle文檔的鏈接; Compound Assignment Operators

1

這是關於explicit vs implicit casting兩個偉大現有員額一個很大的問題,這將有助於你更好地理解:12

現在,嘗試解釋你都注意到的是,在你的第一個例子中,你必須:

c += 10

,你rignt。這將起作用並給你字符K,因爲編譯器足夠智能,可以自動爲你添加integer,你自動添加爲char

但是,另一個不會編譯,因爲它不知道在表達式的RHS中選擇哪一個。我應該投integercharcharint?你必須這樣做:c = (char)(c + 10) @flkes建議