这个问题不是关于 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?
最佳答案
long
的低 32 位被取出并放入 int
。
不过,这是数学:
- 将负
long
值视为2^64
加上该值。所以-1
被视为 2^64 - 1。(这是 unsigned 64 位值,它是该值实际以二进制表示的方式。)< - 将结果和模乘以 2^32。 (这是 无符号 32 位值。)
- 如果结果 >= 2^31,则减去 2^32。 (这是有符号的 32 位值,Java
int
。)
关于java - 在 Java 中,int cast 的工作时间有多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12501331/