首页 新闻 会员 周边

java中数据类型转换错误问题,很奇怪一种编译不能通过,一种能通过

0
[已解决问题] 解决于 2015-11-09 09:17

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

攻城狮dreamer的主页 攻城狮dreamer | 菜鸟二级 | 园豆:206
提问于:2015-11-08 21:40
< >
分享
最佳答案
0

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
奖励园豆:5
之奇一昂 | 小虾三级 |园豆:1421 | 2015-11-08 22:56

c1=c1+1这里要强制转一下 c1 = (char)(c1+1)

之奇一昂 | 园豆:1421 (小虾三级) | 2015-11-08 22:57

@之奇一昂: 明白,还有一个问题,我反编译了一遍,看到if语句中的c1+1<c2中也会有i2c,为什么比较的时候不是把c2转成int型,而是把(c1+1)转成char

攻城狮dreamer | 园豆:206 (菜鸟二级) | 2015-11-08 23:28

@攻城狮dreamer: 我也不太清楚,不过既然是比较char为什么要转成int比,如果c2在if里面再用的话岂不是还要在操作栈上转回来嘛~

之奇一昂 | 园豆:1421 (小虾三级) | 2015-11-09 08:50

@之奇一昂: 嗯,有道理!谢谢了

攻城狮dreamer | 园豆:206 (菜鸟二级) | 2015-11-09 09:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册