发现一个比较有意思的问题。 String abc="aaa";char c=abc.charAt(i);c+=4; 以上正确。如果把:c+=4; 改成:c=c+4;就不正确。为什么??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); 楼上正解与short int i=0;i=i+1;i+=1;类似 类型转换的问题didoleo(冷月无声)说得很全面了 冷月正解:E1 op= E2 等价于 E1 = (T)((E1) op (E2))T是E1的类型, except that E1 is evaluated only once. 建议大家看看:The Java Language Specificationhttp://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html InetAddress 关于字符串比较的高效算法 新手急:在java中调用peri脚本,读取时被卡 关于object []的使用 一个奇怪的菜单问题 我是新来论坛的,请问如何给分与接分? 哪位给我一个线同步最简单的例子 请问子类异常能不能被父类异常捕获? 那里有JRUN服务器下载! 新手关于JAVA界面的简单问题 如何在JAVA中嵌入OFFICE程序,如WORD 怎样用 java 取得摄象头的视频? (请指教)
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);
与
short int i=0;
i=i+1;
i+=1;
类似
didoleo(冷月无声)说得很全面了
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