1.public class test1{
2.public static void main(String args[]){
3.char c1 = 'B';
4.char c2 = 'C';
5.c1+=1;
6.c1=c1+1;
if(c1+1 < c2)
++c1;
System.out.println(c1);
}
}
其中第六行编译出错,第五行没有错,怎么回事 提示:Type mismatch : can’t convert from int to char
c1 += 1 里面隐藏了类型转化。
javap 一下
0: bipush 98 2: istore_1 3: iload_1 4: iconst_1 5: iadd 6: i2c //这个指令就是把int转成char 7: istore_1 8: return
c1=c1+1这里要强制转一下 c1 = (char)(c1+1)
@之奇一昂: 明白,还有一个问题,我反编译了一遍,看到if语句中的c1+1<c2中也会有i2c,为什么比较的时候不是把c2转成int型,而是把(c1+1)转成char
@攻城狮dreamer: 我也不太清楚,不过既然是比较char为什么要转成int比,如果c2在if里面再用的话岂不是还要在操作栈上转回来嘛~
@之奇一昂: 嗯,有道理!谢谢了