Literals

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中做了解释。

上一篇:thymeleaf使用日记


下一篇:bzoj 4319: cerc2008 Suffix reconstruction 贪心