是否有一个包定义了我可以在项目中导入的Java基元的大小?我正在做一些手动位设置,我保留一个字节索引。我设置一个int(魔术数字不赞成)时我不想currentByte += 4
,我宁愿做currentByte += <SomePackage>.SIZE_OF_INT
我想我可以定义自己的,但这有点笨重,特别是如果它们可以在某处使用。
答案 0 :(得分:24)
不是一个类,但是你有Integer.SIZE
,依此类推Long
和浮点类。您还有*.BYTES
。
因此Integer.SIZE
为32,Integer.BYTES
为4,Double.SIZE
为64,Double.BYTES
为8,等等;如果你想知道的话,所有这些都是int
。
注意:*.BYTES
仅在Java 8之后定义(感谢@Slanec注意)
(*.SIZE
出现在Java 5中,但你做至少使用它,对吗?)
是的,这是由JDK定义的,因为JLS本身定义了原始类型的大小;因此,无论在任何平台上的任何Java实现,您都可以保证这些常量具有相同的值。
答案 1 :(得分:9)
基元大小的规范包含在Java语言规范Section 4.2
中整数类型是byte,short,int和long,其值分别是8位,16位,32位和64位二进制补码整数,以及char,其值为16-表示UTF-16代码单元的位无符号整数(§3.1)。
这是 标准,不会更改,因此无需导入它们。您可以将它们用作幻数(尽管fge指出,这些是自Java 5以来存储在各种包装类中合理位置的神奇数字,你应该使用它们而不是自己重新定义它们。