黑马程序员技术交流社区
标题:
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