Java是一种强类型语言,比如一个int类型的a变量不能赋值给byte类型的b变量,但是为什么 byte b = 0;不会报错???不是所有数字的字面量都是int吗????不解
没有超出byte的范围的立即数(0)直接赋值的情况下,编译器会自己搞定。
回复<aclass='referer'target='_blank'>@fantasy_wangxiaotiao:他的职能只能分析静态的东西和做一些立即数的简单运算,变量的话,那是运行时决定的回复<aclass='referer'target='_blank'>@逝水fox:对范围合适的常量会搞定,变量会报错我感觉是这样回复<aclass='referer'target='_blank'>@fantasy_wangxiaotiao:浮点数赋值到float一定要强转,是因为double到float通常会降精度,编译器不会擅自做主,但是整数只要范围合适,不会牵涉到溢出和精度问题,他是能自己处理的。以上只是个人理解了真的是这样涨姿势了<spanstyle="font-family:Verdana,sans-serif,宋体;font-size:14px;line-height:22px;background-color:#FFFFFF;">所有数字的字面量都是int,超出int范围的变量(如long),在数字后面加L标识我的意思是byteb=0;0为int型,这不就意味着把int赋给byte了吗?
<imgsrc="http://static.oschina.net/uploads/space/2013/0527/095018_e43M_874453.png"alt=""/>
懒得说了,现成的一篇博客<arel="nofollow">http://blog.sina.com.cn/s/blog_63544da30100ioa2.html 可以看一下。
byteas=0;//Aas+=1;//B.不会报错as=as+1;//C.会报错byte的范围为-2^7到+2^7-1;所以A不会报错,+=或者-=等有一个隐含操作:类型转换,即为as=(byte)(as+1);所以B不会报错。C中as是byte型,1默认为int型,所以会报错。 <tableborder="0"cellspacing="0"cellpadding="0"> Java™Puzzlers:Traps,Pitfalls,andCornerCases之Puzzle6Multicast一定可以解决你的疑惑版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。