[英]“(firstName.toLowerCase()).charAt(0)” in this manner with Java? the charAt() method should only work with a string reference variables?
[英]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.