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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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编译器会对它进行特殊处理,因此可以正确编译。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

1 个回复

倒序浏览
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中唯一的高类型向低类型自动转换

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马