Java长号过大错误?

Java long number too large error?

提问人:Aaron 提问时间:1/19/2012 最后编辑:Andrew ThompsonAaron 更新时间:6/25/2017 访问量:62224

问:

为什么我得到一个 int 数太大,而 long 被分配给 min 和 max?

/*
long: The long data type is a 64-bit signed two's complement integer.
It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of         9,223,372,036,854,775,807 (inclusive).
Use this data type when you need a range of values wider than those provided by int.
*/
package Literals;

public class Literal_Long {
     public static void main(String[] args) {
        long a = 1;
        long b = 2;
        long min = -9223372036854775808;
        long max = 9223372036854775807;//Inclusive

        System.out.println(a);
        System.out.println(b);
        System.out.println(a + b);
        System.out.println(min);
        System.out.println(max);
    }
}
爪哇岛

评论

1赞 Peter Lawrey 1/19/2012
您可以使用 和 或 和Long.MIN_VALUELong.MAX_VALUE1L << -1-1L >>> 1

答:

77赞 Bohemian 1/19/2012 #1

默认情况下,java 中的所有文字数字都是 ,其范围为 inclusive。ints-21474836482147483647

你的文字超出了这个范围,所以要进行这个编译,你需要指出它们是文字(即后缀):longL

long min = -9223372036854775808L;
long max = 9223372036854775807L;

请注意,java 支持大写和小写,但我建议不要使用小写,因为它看起来像:Lll1

long min = -9223372036854775808l; // confusing: looks like the last digit is a 1
long max = 9223372036854775807l; // confusing: looks like the last digit is a 1

Java 语言规范

如果整数文字以 ASCII 字母 L 或 l (ell) 为后缀,则为长整型文字;否则,它的类型为 int (§4.2.1)。

评论

0赞 helpermethod 1/19/2012
迂腐一点:你也可以使用一个小的.l
12赞 TC1 1/19/2012
@OliverWeiler我想说的是,为了迂腐,你可以但不应该使用小 l,因为它看起来像 1
0赞 Bladt 9/25/2015
如果您使用糟糕的字体,它看起来只会像 1,但可以肯定的是,为什么要冒混淆的风险。
25赞 Petar Minchev 1/19/2012 #2

您必须使用对编译器说它是一个长文本。L

long min = -9223372036854775808L;
long max = 9223372036854775807L;//Inclusive