黑马程序员技术交流社区

标题: 两种结果为什么不同? [打印本页]

作者: 致逝去的青春    时间: 2015-3-15 19:17
标题: 两种结果为什么不同?


作者: 撑起一个家    时间: 2015-3-15 19:23
亲,截图截错了吧
作者: Shey    时间: 2015-3-15 19:39
char类型可以直接赋值给int类型;
下面是直接可以赋值的矢图;
byte→short(char)→int→long→float→double
若逆向则需要强制转换:
你的应该改为:
  1. char c = (char) ('a'+a);
复制代码

作者: Pakumen    时间: 2015-3-15 19:50
其实是常量进行运算和变量相加的区别。
首先第一种运算进行了字符和常量的相加,这里是先相加后决定类型是否能赋予左边。其中也出现了转码的情况。
第二种输出运算有变量参与,默认类型变成int,这样一赋给char就出了问题。
作者: 曾宇    时间: 2015-3-15 19:52
因为第一个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类型转换,这样做的结果可能照成数据精度丢失,为了避免重大数据错误,不允许编译通过。


作者: 董志立    时间: 2015-3-15 20:18
曾宇 发表于 2015-3-15 19:52
因为第一个char c = 'a'+5 做了一个运算。已经定义的char类型c变量,char类型值'a'和int类型5,运算过程中, ...

正解!!,非常精辟!!
作者: 致逝去的青春    时间: 2015-3-15 20:20
曾宇 发表于 2015-3-15 19:52
因为第一个char c = 'a'+5 做了一个运算。已经定义的char类型c变量,char类型值'a'和int类型5,运算过程中, ...

第一种结果是 f  ,不是数字,我截图错了 ,第二种是 int a =5;  char c  = 'a'+5   输出 c   ,结果是可能损失精度
作者: 179407246    时间: 2015-3-15 20:28
损失精度啊
作者: 曾宇    时间: 2015-3-17 17:45
致逝去的青春 发表于 2015-3-15 20:20
第一种结果是 f  ,不是数字,我截图错了 ,第二种是 int a =5;  char c  = 'a'+5   输出 c   ,结果是可能 ...

float和char精度等级相同
作者: 有丶时候    时间: 2015-3-17 19:36
Shey 发表于 2015-3-15 19:39
char类型可以直接赋值给int类型;
下面是直接可以赋值的矢图;
byte→short(char)→int→long→float→doub ...

哦,原来如此。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2