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

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
  前面的就不说了,都看的出来。后面这个答案是没错,s1+=1是对的,但是大部分人给的答案是这样的:
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。什么叫特殊处理什么意思,本着一根筋的精神倒想看看怎么个特殊处理。事实上,这个+=是复合赋值操作符,Java语言规范中讲到,复合赋值(E1op=E2)等价于简单赋值(E1=(T)((E1) op (E2)))。通俗一点就是复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型,也就是进行了强制转换。就酱啦~


59 个回复

正序浏览
强制类型转换确实挺怪
回复 使用道具 举报
。。。好像很厉害的样子
回复 使用道具 举报
认识又深了一步
回复 使用道具 举报
jk7130866 发表于 2015-7-20 21:29
后面的是对的,顺便问问 发表技术博客是不是,任何网站都可以

黄网不行,lol论坛也不行,其他不知道
回复 使用道具 举报
后面的是对的,顺便问问 发表技术博客是不是,任何网站都可以
回复 使用道具 举报
当是复习了,说的很详细
回复 使用道具 举报
学习了。
回复 使用道具 举报
田利阳 来自手机 中级黑马 2015-7-20 01:58:01
53#
huangjiawei 发表于 2015-7-18 00:55
short s1 = 1; s1 = s1   1;有什么错? short s1 = 1; s1  = 1;有什么错?  前面的就不说了,都看的出来。后 ...

嗯嗯 很好 啊      
回复 使用道具 举报
越王剑 发表于 2015-7-19 17:05
帮我看下这个题,我怎么看都不对
假设int a=1,b=2,c=3,以下语句正确的是___________。()
a) c=c/float( ...

我一般晚上行动的,才看到啊。 这题选D啊,考的主要还是一个运算符的优先级,不管ABCD的式子怎么变,只记住一条所得出的最终结果必须是int型的,这里面涉及到3个运算符:(),/,(数据类型)表达式或变量。如果 / 在第三个运算符的表达式中,先执行完表达式,然后在结合强转。看c选项,先执行c/(a/b),结果用d代替,然后再执行(float)d,所以c返回的是float型,其他的一样。
回复 使用道具 举报
路过 打酱油的
回复 使用道具 举报
厉害厉害,学习学习。
回复 使用道具 举报
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
好像看到了两个差不多的问题
回复 使用道具 举报
就是类型转换的问题
回复 使用道具 举报
明白了~~~~
回复 使用道具 举报
huangjiawei 发表于 2015-7-19 11:09
强转的格式都不知道? short s1 = (short )( s1 + 1 );

帮我看下这个题,我怎么看都不对
假设int a=1,b=2,c=3,以下语句正确的是___________。()
a) c=c/float(a//b)         b) c= c/((float a)/b)
c)    c=(float)c/(a/b)        d) c= c/(int)(a/(float)b)
回复 使用道具 举报
huangjiawei 发表于 2015-7-19 11:09
强转的格式都不知道? short s1 = (short )( s1 + 1 );

确实是我写错了,好低级的错误,:'(,没脸见人了
真诚的谢谢!
回复 使用道具 举报
666666666666666
回复 使用道具 举报
我喜欢这个朋友:victory:
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马