这个问题不关于如何long should be correctly cast to an int,而是当我们错误地将它转换为int时会发生什么。
所以请考虑这段代码 -
@Test
public void longTest()
{
long longNumber = Long.MAX_VALUE;
int intNumber = (int)longNumber; // potentially unsafe cast.
System.out.println("longNumber = "+longNumber);
System.out.println("intNumber = "+intNumber);
}
这给出了输出 -
longNumber = 9223372036854775807
intNumber = -1
现在假设我做了以下更改 -
long longNumber = Long.MAX_VALUE - 50;
然后我得到输出 -
longNumber = 9223372036854775757
intNumber = -51
问题是,如何将long的值转换为int?
答案 0 :(得分:38)
long
的低32位被取出并放入int
。
这是数学,但是:
long
值视为2^64
加上该值。因此-1
被视为2 ^ 64 - 1.(这是无符号 64位值,它实际上是以二进制形式表示的值。)int
。)