2016-11-23 22 views
2

爲什麼下面的代碼會產生編譯錯誤? charAt()方法是否返回char數據類型?String charAt()方法在Java中如何工作?

public static void main (String[] args) throws java.lang.Exception 
{ 
    String a = "abcd"; 
    char c = a.charAt(2)-'a'; 
} 

error: incompatible types: possible lossy conversion from int to char

回答

3

當你減去兩個char S,被提拔到int和兩個int的操作數進行減法,並且結果是int

可以轉換爲char的結果分配給char

char c = (char) (a.charAt(2)-'a'); 

注意如果減法的結果爲負值,因爲char不能包含負值,你可能會得到意想不到的效果。

此外,我不確定從字符中減去'a'並將結果存儲在char中是否有意義。在你的例子中,它會給你數字值爲2的字符,它與字符'c'無關。

+0

但減去像這樣:'char c ='b' - 'a';'不會產生任何錯誤!爲什麼不是像int那樣工作呢? – agassaa

+3

@agassaa因爲您的評論中的示例是在編譯時計算的。 – EJP

+0

請提供一個鏈接,我可以在這裏學習! – agassaa

1

Java Language Specification說:

  • 如果任何操作數是參考的類型,取消裝箱轉換 (§5.1.8)被執行。然後:
  • 如果其中一個操作數是double類型,則其他 將轉換爲double。
  • 否則,如果其中一個操作數的類型爲 float,則另一個操作數轉換爲float。
  • 否則,如果任一操作數 的類型爲long,則另一個操作數轉換爲long。

  • 否則,兩個 操作數都轉換爲int類型。

所以,你需要明確地將它轉換成char擺脫可能有損錯誤的

char c = (char) (a.charAt(2)-'a'); 

否則,二進制操作的結果轉換爲類型 將左側變量的值設置轉換(§5.1.13) 設置爲適當的標準值集合(不是擴展指數值 集合),並且轉換的結果是存儲到變量中。

0

charAt()方法返回字符類型但是你正在減去兩個字符將返回int值在這種情況下它將是2。所以接收到int它會工作。

int c = a.charAt(2) - 'a';