ch+1的问题

ch+1的问题

switch(ch+1)里面值为16,直接输出System.out.println(ch+1)为何为57?

请明白人解答!

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕酷酷 2019-08-13 17:25:03

同学你好,可以这样理解:

1、直接输出不会进行字符转换的原因是:Java底层使用‘8’对应的ASCII码值,‘8’对应ASCII为56,56+1会得到57对应值。

而switch:switch在这里相当于一个匹配的过程,在Java中规定,switch语句执行的条件判断最终的转换是不会改变类型并且是严格相等,也就是switch中的判断不管中间过程怎样转换,最终还会是char类型,所以会一直进行char类型的比较。

2、 char ch='8'; int r=1; char ch2=ch+r;报错的原因是:因为JVM运算完后不知道结果是什么,所以会提示损失精度的错误,需要进行强转告诉JVM运算后的类型。ch在这里已经不是常量而是变量,只是将‘8’赋值给ch,因为是变量,存在着强制类型转换问题。

char ch3='8' +1 ;不会报错是因为char本身在ASCII码中可以用数字表示的,所以JVM运算完后可以用数字表示。并且‘8’字符在这里是常量,常量与常量相加是不存在类型转换的。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


好帮手慕酷酷 2019-08-13 16:06:52

你好同学,

1、题目中switch(ch+1) 最终输出为16的原因是,ch+1是先把ch类型转换为整型,然后再加1。然后在switch语句中Java会为它自动转换为char类型,再和case进行匹配‘9’。所以最终输出为16

2、System.out.println(ch+1):ch+1是先把ch类型自动转换为整型,然后再加1,最终输出57。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕粉8566566 #1
    ch+1,是先把ch转换成对应的的ascii码值,'8'对应56,再和1相加,得57,然后switch里再转换成57对应的字符值,为'9'.对应case '9'. 问题1:而直接输出,为什么不会字符转换呢?switch里支持int类型吧? 问题2: char ch='8'; int r=1; char ch2=ch+1; //为什么会报错? char ch2='8' +1 ; //为什么这个不会报错?
    2019-08-13 16:34:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师