Java中数字字面量问题

fantasy_wangxiaotiao 发布于 2013/05/27 02:55
阅读 868
收藏 0
Java是一种强类型语言,比如一个int类型的a变量不能赋值给byte类型的b变量,但是为什么  byte b = 0;不会报错???不是所有数字的字面量都是int吗????不解
加载中
0
逝水fox
逝水fox
没有超出byte的范围的立即数(0)直接赋值的情况下,编译器会自己搞定。
逝水fox
逝水fox
回复 @fantasy_wangxiaotiao : 他的职能只能分析静态的东西和做一些立即数的简单运算,变量的话,那是运行时决定的
fantasy_wangxiaotiao
fantasy_wangxiaotiao
回复 @逝水fox : 对 范围合适的常量会搞定,变量会报错 我感觉是这样
逝水fox
逝水fox
回复 @fantasy_wangxiaotiao : 浮点数赋值到float一定要强转,是因为double到float通常会降精度,编译器不会擅自做主,但是整数只要范围合适,不会牵涉到溢出和精度问题,他是能自己处理的。以上只是个人理解了
fantasy_wangxiaotiao
fantasy_wangxiaotiao
真的是这样 涨姿势了
0
loki_lan
loki_lan
所有数字的字面量都是int,超出int范围的变量(如long),在数字后面加L标识
fantasy_wangxiaotiao
fantasy_wangxiaotiao
我的意思是byte b = 0; 0为int型,这不就意味着把int赋给byte了吗?
0
LianyouCQ
LianyouCQ

懒得说了,现成的一篇博客http://blog.sina.com.cn/s/blog_63544da30100ioa2.html 可以看一下。

LianyouCQ
LianyouCQ
byte as = 0; // A as += 1; //B. 不会报错 as = as + 1; //C. 会报错 byte 的范围为-2^7 到 +2^7 - 1;所以A不会报错, +=或者-=等有一个隐含操作:类型转换,即为as = (byte) (as + 1);所以B不会报错。 C中as是byte型,1默认为int型,所以会报错。
0
优雅先生
优雅先生

Java™ Puzzlers: Traps, Pitfalls, and Corner Cases之Puzzle 6 Multicast一定可以解决你的疑惑


返回顶部
顶部