黑马程序员技术交流社区

标题: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? [打印本页]

作者: huizi1992    时间: 2015-7-9 23:45
标题: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

作者: Yunny    时间: 2015-7-10 00:08
沙发沙发~!
作者: 430422    时间: 2015-7-10 00:11
真棒,加油!
作者: 张亚昆    时间: 2015-7-10 00:25
对的。嗯嗯
作者: eayonh    时间: 2015-7-10 02:02
好像是这样
作者: 新手ing    时间: 2015-7-10 10:10
学习了。不错。
作者: hnyzhlq    时间: 2015-7-10 10:19
是这样的,点个赞
作者: 拾起落叶    时间: 2015-7-10 10:55
学习了
作者: 炎舞霜冬    时间: 2015-7-10 11:19
很对啊,就是这么用的
作者: 野驴少东    时间: 2015-7-10 11:33
short s1 = 1; s1 = s1 + 1;进行了一次运算,运算过程中产生了类型提升的问题
作者: 乔栋    时间: 2015-7-10 15:24
。。。。。。。。。。。。。
作者: wh121    时间: 2015-7-10 15:42
是指 s1 += 1 在编译器里默认做了强制性转换处理  ??
作者: 猫咪先生    时间: 2015-7-12 15:44
s1是short型的,当s1与1相加是会自动类型提升提升为int型,而short型是2byte,int是4byte,所以把和赋值给s1会到导致丢失精度。而“+=”是一个运算符,它本身隐藏着强制类型转换,即s1=(short) (s1+1).所以不会报错。如果解决了你的问题那就给点黑马币或技术分吧哈哈!
作者: Love丶cd    时间: 2015-7-12 16:14
的确是这样的,因为相互转型存在精度变化问题。




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