在Oracle“原始数据类型”页面中,它提到Java 8添加了对无符号int和long的支持:
int
:默认情况下,int
数据类型是32位带符号的二进制补码整数,其最小值为-2 31,最大值为2 31 -1。在Java SE 8和更高版本中,可以使用int
数据类型表示无符号的32位整数,其最小值为0,最大值为2 32 -1。使用Integer
该类可将int
数据类型用作无符号整数。有关更多信息,请参见“数字类”部分。像静态方法compareUnsigned
,divideUnsigned
等已被添加到Integer
类,以支持算术运算的无符号整数。
long
:long
数据类型是64位二进制补码整数。带符号long
的最小值为-2 63,最大值为2 63 -1。在Java SE 8和更高版本中,可以使用long
数据类型表示无符号的64位long
,其最小值为0,最大值为2 64 -1。当您需要一个比int提供的值宽的值范围时,请使用此数据类型。该Long
班还包含方法,如compareUnsigned
,divideUnsigned
等支持算术运算的无符号long
。
但是,我发现没有办法声明无符号的long或integer。例如,以下代码在应该在范围内时(给出的值恰好是2 64 -1)给出了“文字超出范围”的编译器错误消息(我使用的是Java 8 )。 :
public class Foo {
static long values = 18446744073709551615L;
public static void main(String[] args){
System.out.println(values);
}
}
那么,有什么方法可以声明一个无符号的int或long?