String charAt()方法在Java中是如何工作的?
为什么下面的代码会产生编译错误?String charAt()方法在Java中是如何工作的?,java,oop,Java,Oop,为什么下面的代码会产生编译错误?charAt()方法是否返回char数据类型 public static void main (String[] args) throws java.lang.Exception { String a = "abcd"; char c = a.charAt(2)-'a'; } 错误:不兼容类型:从int到char的可能有损转换当您减去两个char时,它们将升级为int,并对两个int操作数执行减法,结果是int 您可以强制转换到char以将结果分
charAt()
方法是否返回char
数据类型
public static void main (String[] args) throws java.lang.Exception
{
String a = "abcd";
char c = a.charAt(2)-'a';
}
错误:不兼容类型:从int到char的可能有损转换当您减去两个char
时,它们将升级为int
,并对两个int
操作数执行减法,结果是int
您可以强制转换到char
以将结果分配给char
:
char c = (char) (a.charAt(2)-'a');
请注意,如果减法结果为负值,则可能会得到意外结果,因为char
不能包含负值
此外,我不确定从字符中减去“a”并将结果存储在char
中是否有意义。在您的示例中,它将为您提供数值为2的字符,该字符与字符“c”无关。表示:
- 如果任何操作数为引用类型,则取消装箱转换
(§5.1.8)的规定。然后:
- 如果任一操作数的类型为double,则
另一个转换为双精度
- 否则,如果任一操作数的类型为
浮动,另一个转换为浮动
- 否则,如果任一操作数
为long类型,另一个转换为long
- 否则,两者都是
操作数转换为int类型。
因此,您需要显式地将其转换为char,以消除可能的有损错误
char c = (char) (a.charAt(2)-'a');
否则,二进制操作的结果将转换为类型
左侧变量的,经过值集转换(§5.1.13)
到适当的标准值集(不是扩展指数值
设置),并将转换结果存储到变量中
charAt()方法返回char类型,但要减去两个返回int值的char,在本例中为2。所以把它接收到int中,它会工作的
int c=a.charAt(2)-'a' 但是像这样减法:charc='b'-'a'代码>不会出错!为什么它不能像int那样工作?@agassa,因为注释中的示例是在编译时计算的。