A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 致逝去的青春 中级黑马   /  2015-3-15 19:17  /  1755 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


9 个回复

倒序浏览
亲,截图截错了吧
回复 使用道具 举报
char类型可以直接赋值给int类型;
下面是直接可以赋值的矢图;
byte→short(char)→int→long→float→double
若逆向则需要强制转换:
你的应该改为:
  1. char c = (char) ('a'+a);
复制代码

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
其实是常量进行运算和变量相加的区别。
首先第一种运算进行了字符和常量的相加,这里是先相加后决定类型是否能赋予左边。其中也出现了转码的情况。
第二种输出运算有变量参与,默认类型变成int,这样一赋给char就出了问题。

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为第一个char c = 'a'+5 做了一个运算。已经定义的char类型c变量,char类型值'a'和int类型5,运算过程中,值'a'自动转换成int类型的数值,然后和5做加法运算,运算完毕,在把结果输出。注意的一点,char是低精度的,如果可以的话,你打印一下c的数据类型,应该是int类型。
第二个问题,虽然你截图错了,还是能懂你问的是什么意思。
int a = 5;  char c = a +'a'; 由于你指定了a变量的类型是int,值是5。而自动转换自动是从低精度向高精度转换的。在已经定义了int类型变量a的情况下,和已经定义的char做加法运算,会编译异常,注意,是编译异常。原因是没有办法把int类型向低精度自动转换成char类型。
区别:java虚拟机对①进行编译,没有语法错误,逻辑错误。编译通过,运行计算时发现需要类型转换,于是进行了隐藏的类型转换。
java虚拟机对②进行编译,发现程序员要把int类型向char类型转换,这样做的结果可能照成数据精度丢失,为了避免重大数据错误,不允许编译通过。

评分

参与人数 1技术分 +1 收起 理由
艺多不压身丶 + 1 赞一个!

查看全部评分

回复 使用道具 举报 2 0
曾宇 发表于 2015-3-15 19:52
因为第一个char c = 'a'+5 做了一个运算。已经定义的char类型c变量,char类型值'a'和int类型5,运算过程中, ...

正解!!,非常精辟!!
回复 使用道具 举报
曾宇 发表于 2015-3-15 19:52
因为第一个char c = 'a'+5 做了一个运算。已经定义的char类型c变量,char类型值'a'和int类型5,运算过程中, ...

第一种结果是 f  ,不是数字,我截图错了 ,第二种是 int a =5;  char c  = 'a'+5   输出 c   ,结果是可能损失精度
回复 使用道具 举报
损失精度啊
回复 使用道具 举报
曾宇 中级黑马 2015-3-17 17:45:51
9#
致逝去的青春 发表于 2015-3-15 20:20
第一种结果是 f  ,不是数字,我截图错了 ,第二种是 int a =5;  char c  = 'a'+5   输出 c   ,结果是可能 ...

float和char精度等级相同
回复 使用道具 举报
Shey 发表于 2015-3-15 19:39
char类型可以直接赋值给int类型;
下面是直接可以赋值的矢图;
byte→short(char)→int→long→float→doub ...

哦,原来如此。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马