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

时间:2016-11-23 08:44:31

标签: java oop

为什么以下代码会产生编译错误?不会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

3 个答案:

答案 0 :(得分:4)

当你减去两个#include<stdio.h> void hello(FILE ** fp) { fclose(*fp); if( ( *fp = fopen("log","r") ) == NULL) printf("%s", "Error opening file"); } void main() { char p; FILE *sf=fopen("prac.txt","r"); hello(&sf); p=fgetc(sf); printf("%c",p); } 时,它们会被提升为char,并且会对两个int个操作数执行减法,结果为int

您可以转换为int以将结果分配给char

char

请注意,如果减法结果为负值,则可能会出现意外结果,因为char c = (char) (a.charAt(2)-'a'); 不能包含负值。

此外,我不确定减去&#39; a&#39;从一个字符中将结果存储在char中。在您的示例中,它将为您提供数字值为2的字符,该字符与字符&#39; c&#39;无关。

答案 1 :(得分:1)

Java Language Specification说:

  
      
  • 如果任何操作数是引用类型,则取消装箱转换   (§5.1.8)执行。然后:
  •   
  • 如果任一操作数的类型为double,则为   其他被转换为双倍。
  •   
  • 否则,如果任一操作数是类型   浮动,另一个转换为浮动。
  •   
  • 否则,如果是任一操作数   是long类型,另一个是long。

  •   
  • 否则,两者都有   操作数转换为int类型。

  •   

因此,您需要将其显式地转换为char以消除可能的有损错误

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

否则,二进制操作的结果将转换为该类型   左侧变量的值,经过值集转换(§5.1.13)   到适当的标准值集(不是扩展指数值)   set),转换结果存储在变量中。

答案 2 :(得分:0)

charAt()方法返回char类型但是你要减去两个将返回int值的char,在这种情况下它将是2。所以把它接收到int它会起作用。

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