String abc="aaa";
char c=abc.charAt(i);
c+=4; 以上正确。如果把:c+=4; 改成:c=c+4;
就不正确。为什么???

解决方案 »

  1.   

    c+=4;
    c=c+4;当c是int类型的时候,这两个表达式是一样的,但是c不是int时,这两个表达式是不一样的。这两个表达式都被称为赋值表达式。第二条语句使用的是简单赋值操作符(=),而第一条语句使用的是复合赋值操作符。(复合赋值操作符包括 +=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=和|=)Java语言规范中讲到,复合赋值 E1 op= E2等价于简单赋值E1 = (T)((E1)op(E2)),其中T是E1的类型,除非E1只被计算一次。 
    换句话说,复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量的类型。
    所以要让c=c+4 编译能通过,得
    int a=c;
    c=(char)(a+4);
    System.out.println(c);
      

  2.   

    楼上正解

    short int i=0;
    i=i+1;
    i+=1;
    类似
      

  3.   

    类型转换的问题
    didoleo(冷月无声)说得很全面了
      

  4.   

    冷月正解:E1 op= E2  等价于 E1 = (T)((E1) op (E2))
    T是E1的类型, except that E1 is evaluated only once. 建议大家看看:The Java Language Specification
    http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html