黑马程序员技术交流社区
标题: 一道面试题,终于找到终极答案了 [打印本页]
作者: huangjiawei 时间: 2015-7-18 00:55
标题: 一道面试题,终于找到终极答案了
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)))。通俗一点就是复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型,也就是进行了强制转换。就酱啦~
作者: 824519050 时间: 2015-7-18 10:08
学习了
作者: 加多宝 时间: 2015-7-18 10:52
领教了哇
作者: 帅帅loyal 时间: 2015-7-18 10:54
so easy啊
作者: 小刘123 时间: 2015-7-18 10:54
学习了。。。。
作者: fmi110 时间: 2015-7-18 11:00
顶一个 当复习了
作者: Y1011 时间: 2015-7-18 14:10
当复习了
作者: No98342 时间: 2015-7-18 14:12
{:3_46:}是这样啊
作者: oooohnick 时间: 2015-7-18 14:14
哇!这个要保存下来!技术语言描述得好准确!!!
作者: wws1214 时间: 2015-7-18 14:41
恩,刚好再找这方面的例子
作者: 吃荷包蛋 时间: 2015-7-18 15:02
6666666666666666666
作者: zhwfa1991 时间: 2015-7-18 15:46
原来如此
作者: 360638403 时间: 2015-7-18 18:38
昨天刚讲完
作者: maizi1912 时间: 2015-7-18 18:49
学习了 收藏一下
作者: 158803629 时间: 2015-7-18 19:08
复习了 ··
作者: 白马程序猿 时间: 2015-7-18 19:14
类型自动转换
作者: 冷风然 时间: 2015-7-18 19:38
应该是自动转int
作者: 疯雪 时间: 2015-7-18 19:44
明白了,谢谢了
作者: 陈建民1 时间: 2015-7-18 19:46
这个就是这样啊
作者: 李文思 时间: 2015-7-18 19:58
学习了,讲解的很详细
作者: gongyanfa123 时间: 2015-7-18 20:03
学习了,领教。。
作者: myself123 时间: 2015-7-18 20:06
学习中,加油
作者: q953655369 时间: 2015-7-18 20:10
加油 努力中
作者: jk7130866 时间: 2015-7-18 20:14
学习了,很有帮助 是容易忘记的知识点
作者: 官沛 时间: 2015-7-18 20:16
嗯,当时学的时候,也纠结了好一会儿。
复习了!
作者: 扶摇丶 时间: 2015-7-18 20:26
这个就是强转和自动转型的区别吧
作者: 为明天而奋斗 时间: 2015-7-18 20:30
恩呢,说的很好
作者: 18678927239 时间: 2015-7-18 20:36
给大神跪了
作者: zhaoyue 时间: 2015-7-18 21:12
也就是一些JAVA编译的特点 要知道记住才行。。
作者: kkkkkccccc 时间: 2015-7-18 21:15
又复习了一遍~
作者: CLTDEZHUCE 时间: 2015-7-18 21:27
又复习了
作者: xiaoxinxin003 时间: 2015-7-18 21:31
不错不错!
作者: 落叶随尘 时间: 2015-7-18 22:27
学习了
作者: 鹰隼展翼 时间: 2015-7-18 22:34
复习了一下
作者: 越王剑 时间: 2015-7-18 22:41
何必那么麻烦,short s1 = 1; s1 += 1;等同于 short s1 = short ( s1 + 1 );
作者: 西门雅虎 时间: 2015-7-18 23:02
好好学习,学习了
作者: huangjiawei 时间: 2015-7-19 11:09
强转的格式都不知道? short s1 = (short )( s1 + 1 );
作者: 张玉久 时间: 2015-7-19 11:14
写的很详细
作者: 李林_ 时间: 2015-7-19 11:18
刚好,我也有这种类型的题,学习了。。。
作者: 田利阳 时间: 2015-7-19 11:36
这个就是s+=1存在一个隐式的强制类型转换.
作者: yangtingdong 时间: 2015-7-19 11:55
又加深了印象
作者: 野驴少东 时间: 2015-7-19 12:07
我喜欢这个朋友:victory:
作者: decadence90 时间: 2015-7-19 12:13
666666666666666
作者: 越王剑 时间: 2015-7-19 17:02
确实是我写错了,好低级的错误,:'(,没脸见人了
真诚的谢谢!
作者: 越王剑 时间: 2015-7-19 17:05
帮我看下这个题,我怎么看都不对
假设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)
作者: 晓月残魂 时间: 2015-7-19 18:10
明白了~~~~
作者: 白马程序猿 时间: 2015-7-19 18:24
就是类型转换的问题
作者: 人造番茄 时间: 2015-7-19 18:31
好像看到了两个差不多的问题
作者: yongaidongbing 时间: 2015-7-19 18:59
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
作者: junfeng 时间: 2015-7-19 20:26
厉害厉害,学习学习。
作者: 幸_好 时间: 2015-7-19 20:28
路过 打酱油的
作者: huangjiawei 时间: 2015-7-20 00:12
我一般晚上行动的,才看到啊。 这题选D啊,考的主要还是一个运算符的优先级,不管ABCD的式子怎么变,只记住一条所得出的最终结果必须是int型的,这里面涉及到3个运算符:(),/,(数据类型)表达式或变量。如果 / 在第三个运算符的表达式中,先执行完表达式,然后在结合强转。看c选项,先执行c/(a/b),结果用d代替,然后再执行(float)d,所以c返回的是float型,其他的一样。
作者: 田利阳 时间: 2015-7-20 01:58
huangjiawei 发表于 2015-7-18 00:55
short s1 = 1; s1 = s1 1;有什么错? short s1 = 1; s1 = 1;有什么错? 前面的就不说了,都看的出来。后 ...
嗯嗯 很好 啊
作者: icichacici 时间: 2015-7-20 06:18
学习了。
作者: wuchangfeng 时间: 2015-7-20 07:42
当是复习了,说的很详细
作者: jk7130866 时间: 2015-7-20 21:29
后面的是对的,顺便问问 发表技术博客是不是,任何网站都可以
作者: huangjiawei 时间: 2015-7-20 21:55
黄网不行,lol论坛也不行,其他不知道
作者: 王庆艳 时间: 2015-7-20 22:10
认识又深了一步
作者: spike_az 时间: 2015-7-20 22:36
。。。好像很厉害的样子
作者: chaotongyou 时间: 2015-7-20 22:39
强制类型转换确实挺怪
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |