在Java中,为按位操作假定一定大小的基元类型安全吗?
考虑到Java的“一次编写,在任何地方运行”的范例,以及Java教程为所有原始数据类型提供了明确的位大小,而没有丝毫暗示这取决于任何内容,我想说,是的,在Java中,为按位操作假定一定大小的基元类型安全吗?,java,64-bit,Java,64 Bit,考虑到Java的“一次编写,在任何地方运行”的范例,以及Java教程为所有原始数据类型提供了明确的位大小,而没有丝毫暗示这取决于任何内容,我想说,是的,int始终是32位的 但是有什么警告吗?定义了值范围,但没有说明内部表示,我想它可能不应该这样做。然而,我有一些代码对假定为32位宽度的int变量执行逐位操作,我想知道这些代码在所有体系结构上是否安全 对于这类问题,是否有很好的深入资源?无论本机体系结构如何,Java代码总是像Int是32位一样工作 在规范中,还有关于表示的明确规定: 整数类型为
int
始终是32位的
但是有什么警告吗?定义了值范围,但没有说明内部表示,我想它可能不应该这样做。然而,我有一些代码对假定为32位宽度的int
变量执行逐位操作,我想知道这些代码在所有体系结构上是否安全
对于这类问题,是否有很好的深入资源?无论本机体系结构如何,Java代码总是像Int是32位一样工作 在规范中,还有关于表示的明确规定: 整数类型为byte、short、int和long,其值分别为8位、16位、32位和64位带符号的两位补码整数,以及char,其值为表示UTF-16代码单元的16位无符号整数
是的,Java中没有sizeof运算符 根据Bruce Eckel在Java中的想法:
:16位short
:32位int
:64位长
这些值在不同的体系结构之间没有差异。您可能还需要检查:每个按位操作都会得到它的操作码(ISHL、IOR、IAND等)虽然Java原语的行为在语言规范中被完全准确地指定,但有一个警告:在64位体系结构上,INT可能是字对齐的,这意味着一个数组的int(或任何非64位的原始类型)可以占用32位java内存的两倍。 这不是一个答案,因为已经有了一个很好的答案,但是我想我会指出,java的原因是这样的,但不是C或C++是java编译成一个虚拟机(Java VM或JVM)。. 因为JVM运行相同的字节码,并且无论它在哪台机器上都具有相同的内部结构,所以它在每台机器上的基本类型的大小似乎是相同的。C和C++没有试图模仿任何特定的行为,并且在各种机器上都受到处理器实现的奇思乱想。在发现更多的代码之后,我发现了引用,然后添加了它。语言是否被编译成字节码,以及它是否具有跨平台的原始大小是独立的。