簡體   English   中英

String charAt()方法在Java中如何工作?

[英]How does String charAt() method work in Java?

為什么以下代碼會產生編譯錯誤? charAt()方法不返回char數據類型嗎?

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

當您減去兩個char ,它們將被提升為int並且對兩個int操作數執行減法,結果為int

您可以強制轉換為char以將結果分配給char

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

請注意,如果減法得出負值,則可能會得到意外的結果,因為char不能包含負值。

此外,我不確定從字符中減去“ a”並將結果存儲在char是否有意義。 在您的示例中,它將為您提供數字值為2的字符,該字符與字符'c'無關。

Java語言規范說:

  • 如果任何一個操作數是引用類型,則執行裝箱轉換(第5.1.8節)。 然后:
  • 如果一個操作數的類型為double,則另一個將轉換為double。
  • 否則,如果其中一個操作數的類型為float,則另一個將轉換為float。
  • 否則,如果其中一個操作數的類型為long,則另一個將轉換為long。

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

因此,您需要將其顯式轉換為char,以消除可能的有損錯誤

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

否則,將二進制運算的結果轉換為左側變量的類型,進行值集轉換(第5.1.13節)為適當的標准值集(而不是擴展指數值集),然后將結果轉換的結果存儲到變量中。

charAt()方法返回char類型但是您要減去兩個char,這將返回int值,在這種情況下為2。 因此,將其接收到int它將起作用。

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

暫無
暫無

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

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