Literals
根据JSL Java中numberic literials 有integer literials和 float-point literials,
对于 float-point literials ,需要区别float 和 float 两种type,给 float type 加一个suffix F,这样 有suffix 和无suffix 就能区别出两种类型。
对于integer literials , 按照float-point literials区别float 和 double 的方法,给long 类型的 加一个 suffix L,这样就区别出 int 和 long 。
但是byte,short 也是用和int 一样的literials。这是因为什么?
因为Java 编译器有一种能力,可以根据integer literials的value,来判断是否在byte ,short的range内。
既然可以根据value来判断
- 为什么float-point literials 需要加suffix F来区别?
- 为什么区别int 和long 需要加suffix L?
因为float 和double的区别不在于value大小,而在于底层的存储格式不一致(参考IEEE 754)。
至于为什么区别int 和long 需要加suffix L,而不采用判断value的range,还没搞明白。
BinaryIntegerLiteral
从Java 7 开始,在integer literials中添加BinaryIntegerLiteral,这样带来一个方便,就是遇到下面需求的时候
从int 的 0000_0000_0000_0000_0000_0000_ 1111_1011,顺序从左到右,取出最后四位
int x = 0B0000_0000_0000_0000_0000_0000_ 1111_1011;
int rightFourBits = x & 0b1111; //用了BinaryIntegerLiteral更直观
int rightFourBitsBefore = x & 15 ; // 没用 BinaryIntegerLiteral
带来的问题,在byte中做了解释。