600851475143的“整数太大”错误消息

2022-08-31 09:56:37
public class Three {
    public static void main(String[] args) {
        Three obj = new Three();
        obj.function(600851475143);
    }

    private Long function(long  i) {
        Stack<Long> stack = new Stack<Long>();

        for (long j = 2; j <= i; j++) {
            if (i % j == 0) {
                stack.push(j);
            }
        }
        return stack.pop();
    }
}

运行上述代码时,它会在 行 上生成错误。为什么?obj.function(600851475143);


答案 1

600851475143不能表示为 32 位整数(类型 )。它可以表示为 64 位整数(类型 )。Java 中的长文字以“L”结尾:intlong600851475143L


答案 2

追加后缀 : 。L23423429L

默认情况下,java 将所有数字文本解释为 32 位整数值。如果要显式指定这是比 32 位整数更大的值,则应对长整型值使用后缀。L