![](/img/trans.png)
[英]“(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.