long的Java按位表示是否有所不同?

long的Java按位表示是否有所不同?,java,arrays,bit-manipulation,long-integer,fill,Java,Arrays,Bit Manipulation,Long Integer,Fill,我想填充一个长的Java数组,这样它的所有位都被设置为1。我发现,或“0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL”: 因此,我使用Arrays.fill()将数组填充为1: final long allBitsOn = -1L; long[] bits = new long[arrayLength]; Arrays.fill(bits, allBitsOn); 这个数组是一个主要项目的基本基础设施,我想完全确定long有64位,并且long(-1)在所有VM实现

我想填充一个长的Java数组,这样它的所有位都被设置为1。我发现,或“0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL”:

因此,我使用
Arrays.fill()
将数组填充为1:

final long allBitsOn = -1L;
long[] bits = new long[arrayLength];
Arrays.fill(bits, allBitsOn);
这个数组是一个主要项目的基本基础设施,我想完全确定long有64位,并且
long(-1)
在所有VM实现和Java的未来版本中,其所有位都将始终设置为1

这个假设安全吗

这个假设安全吗

是的,它是由Java语言规范定义的:

整数类型有
字节
整数
、和
,其值分别为8位、16位、32位和64位带符号的二补整数


你所描述的是整数是如何工作的,-1是“所有位都打开的”。

是的,假设是安全的。从:

4.2。基本类型和值

整数类型有
字节
整数
,其值分别为8位、16位、32位和64位有符号二位补整数,以及char,其值为代表UTF-16码单元的16位无符号整数(§3.1)


在中,
-1
由所有的位模式组成。

不知道您是否意外地错过了它,但是您从中了解如何设置长的so post指定它必须是:
长l=-1L。L在那里待了一段时间。Cheers@Daneo:
long l=-1
长l=-1L生成完全相同的字节码()。当然,有时您需要
L
,但在将文本
-1
分配给
时则不需要。当然,这不是一个好的做法。@T.J.Crowder感谢您的澄清,并予以确认。现在可能没有必要这样做,但只是为了防止类似不采用这种做法的情况。正如那个链接所说,不应用L会使它自动转换,并且在值符合整数大小的情况下,这会起作用。我认为最好不要依赖这些。@Daneo:同意,总是最好把它写出来。更新了我的答案-总是很好的明确。
final long allBitsOn = -1L;
long[] bits = new long[arrayLength];
Arrays.fill(bits, allBitsOn);