使用SMPP协议时,我使用long
表示system_id
类型(4字节)的unsigned int
字段的值。在协议本身中,字段值以十六进制格式指定。
所以我想将其保留在我的代码中。在尝试比较变量值时,我写道:
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
表示法呢? 最佳答案
在文字末尾加一个L。 0x80000009L是2147483657。请注意,小写字母l也可以,但是我不建议这样做,因为在许多字体中,它看起来像第一位。
关于java - 我可以以某种方式长时间使用0x表示法吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21278332/