我可以以某种方式使用0x表示法长

时间:2014-01-22 09:00:08

标签: java

使用SMPP协议我使用long来表示system_id类型unsigned int字段的值(4个字节)。在协议本身中,字段值以十六进制格式指定。 所以我想在我的代码中保留它。在尝试比较我写的变量值时:

long id = ...;
//...
if(id == 0x80000009){...}

并且发现java将0x80000009解释为int,它被签名为4字节int,因此发生溢出并且比较失败:

id         == 2147483657
0x80000009 ==-2147483639

然后我尝试了显式类型转换,即id == (long)0x80000009 - 相同的结果。 然后我声明变量如下:

static final long bind_transceiver_resp = 0x80000009;

但它仍然是溢出的int值。

那么有没有办法使用0x表示法,其值大于Integer.MAX_VALUE

1 个答案:

答案 0 :(得分:6)

将L放在文字的末尾。 0x80000009L是2147483657.请注意,小写l也适用,但我不推荐它,因为在许多字体中,它看起来像是第一。