黑马程序员技术交流社区

标题: 一个数据类型的问题,请大家帮补充得完整点 [打印本页]

作者: 肖银    时间: 2014-1-3 18:47
标题: 一个数据类型的问题,请大家帮补充得完整点
byte s1 = 1; s1 = s1 + 1;有什么错? byte s1 = 1; s1 += 1;有什么错?
对于byte s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给byte类型s1时,编译器将报告需要强制转换类型的错误。
对于byte s1 = 1; s1 += 1;由于 += java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。


作者: 其LovE斤    时间: 2014-1-3 19:32
byte s1 = 1; s1 = s1 + 1;有什么错?
byte s1 = 1;   在编译器看来 这里的 1 是int型的,byte和int之间存在转换的可能,同时1是常量,“=”右
                    边是常量的情况下,编译器会判断 1是不是属于byte范围内的(-128~127之间)如果属于
                    这个范围,就会自动转型
s1 = s1 + 1;  s1在这里是变量,是byte类型的变量,1是int型的。编译器将s1提升为int型的。然后和1相加(s1+1)
                    但是“=”右边是变量的情况下,变量代表的是一片内存空间,无法判断是否在byte范围内。
                    int在内存中占4个字节,byte是占1个字节,左边放不下,错误,报的是  数据精度丢失。

byte s1 = 1; s1 += 1;有什么错?
s1+=1 : 因为   s1+=1 是一个复合赋值表达式,在其内部有一个自动转换动作。然后再将s1=s1 是正确的。
                =号右边的转换成左边的数据类型,高类型->低类型 自动转化格式
               不管右边是否高于左边。 是java中唯一的高类型向低类型自动转换






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