java

时间:2016-09-28 13:56:50

标签: java

我有以下代码

 class arr
  { 
    public static void main(String a[])
     {
       char c='A';
       c+=10;
        System.out.println(c);
        }
     } 

从java 8编译时,它编译成功。

output K

但是当我编译下面的代码时:

class arr
{ 
  public static void main(String a[])
   {
    char c='A';
      c=c+10;
      System.out.println(c);
    }
 } 

我收到以下错误:

  logic.java:6: error: incompatible types: possible lossy conversion from int to char
  c=c+10;
    ^

我不明白c=c+10c+=10同样的事情,为什么我会收到这样的错误? 请帮我。谢谢。

2 个答案:

答案 0 :(得分:6)

编译器为你做char += int

提供了一些很好的语法糖

它基本上将c+=10;更改为c = (char)(c + 10);

但是,c=c+10;没有隐式转换,因此无法编译。

这是oracle docs关于其工作方式的链接; Compound Assignment Operators

答案 1 :(得分:1)

这是一个很棒的问题,其中包含两篇关于explicit vs implicit casting的优秀帖子,可以帮助您更好地理解:12

现在,试着解释一下你注意到的是你的第一个例子:

c += 10

你很苛刻。这将起作用,并为您提供角色K,因为编译器足够智能,可以自动投射您要添加为integer的{​​{1}}。

然而,另一个不会编译,因为它不知道在表达式的char中选择哪一个。我应该将RHS投放到integer还是char投放到char?你必须自己做:int作为@flkes建议