将 long 转换为 int 得到 0

Converting long to int gives 0

我一直在测试这段代码:

public class Test {
    public static int longToInt(long num) {
        return (int) (num);
    }

    public static void main(String[] args) {
        System.out.println(longToInt(100000000L));
    }
}

我运行了它,但 longToInt 只返回 0。这是怎么回事?

因为,你给的 long 不适合 int。给一个更小的长试试! 整数(32 位) 长(64 位)

long 转换为 int 是通过删除 long 的前 32 位来完成的。如果 long 值大于 Integer.MAX_VALUE (2147483647) 或小于 Integer.MIN_VALUE (-2147483648),最终结果是您丢失了有效位,结果为 "rubbish".


话虽如此,但您提供的代码并不像您所说的那样...如果您正确编译并 运行 它。原始版本应该打印一个意想不到的数字……但不是零。修改后的版本应该按预期打印 1000000。


... is there a way I can store a long number larger than Integer.MAX_VALUE inside an int number?

没有

严格来说是的......在某些情况下。您可以做一些事情来映射数字,例如,如果您知道您的数字始终在 AB 范围内,并且 B - A 小于 2 32,那么您可以通过从中减去 A 将那个范围内的 long 映射到 int

但是,如果您存储在 long 中的数字域的大小大于 232。通常是这样。