Java中数字字面量问题?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Java中数字字面量问题?报错

爱吃鱼的程序员 2020-06-22 19:12:05 25

Java是一种强类型语言,比如一个int类型的a变量不能赋值给byte类型的b变量,但是为什么  byte b = 0;不会报错???不是所有数字的字面量都是int吗????不解

Java
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-22 19:12:20

    没有超出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一定可以解决你的疑惑


    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程