开发者社区> 问答> 正文

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

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

展开
收起
爱吃鱼的程序员 2020-06-22 19:12:05 439 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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


    2020-06-22 19:12:20
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载