Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String charAt()方法在Java中是如何工作的?_Java_Oop - Fatal编程技术网

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,因为注释中的示例是在编译时计算的。