Java是否在任何地方定义其原始类型的大小?

ven*_*syv 8 java primitive primitive-types

是否有一个包定义了我可以在项目中导入的Java基元的大小?我正在做一些手动位设置,我保留一个字节索引.我currentByte += 4设置一个int(魔术数字不赞成)时我不想做,我宁愿这样做currentByte += <SomePackage>.SIZE_OF_INT

我想我可以定义自己的,但这有点笨重,特别是如果那些在某个地方可用.

fge*_*fge 24

不是一个类,但你有Integer.SIZE,等等和for Long浮点类.你也有*.BYTES.

因此Integer.SIZE是32,Integer.BYTES是4,Double.SIZE是64和Double.BYTES8等等; 所有这些都是int你想知道的情况.

注意:*.BYTES仅在Java 8之后定义(感谢@Slanec注意)

(*.SIZE出现在Java 5中,但你至少使用了吧?)

是的,这是由JDK定义的,因为JLS本身定义了原始类型的大小; 因此,无论在任何平台上的Java实现,您都可以保证这些常量具有相同的值.


小智 9

原语大小的规范包含在Java语言规范的4.2节中

整数类型是byte,short,int和long,其值分别为8位,16位,32位和64位二进制补码整数,以及char,其值为16位无符号整数代表UTF-16代码单元(§3.1).

这是标准,将不会改变,所以一个并不需要它们导入,你可以用它们作为幻数(虽然作为FGE指出,这些都是魔术数字存储在合理的地方在不同的包装类从Java 5开始,你应该使用它们而不是自己重新定义它们.

  • @shookees这些值的任何更改都将是所有类文件及其向后和向前兼容性的重大变化.与"您的代码不再有效"相比,"您的代码不再按预期工作*"将是次要的.我不相信这些可能会改变并保持Java.鉴于`Integer.SIZE`是一个静态final并在编译时被替换,使用Integer中的值,如果要更改,同样是一个突破性的更改,它在更高版本中更改. (3认同)
  • @shookees虽然我绝对同意标准改变,但我会很自然地称这种情况通常不会改变.Oracle落后于Java,而Oracle并不是那种改变这类事物的公司.考虑到类似公司和财团的标准,这是他们为了避免改变而向后弯曲的细节.如果语言规范变得足够紧张导致Oracle改变这种情况,我会感觉会有这么多其他问题,这些问题的大小将是您最不担心的问题. (3认同)