Java长号太大错误?

时间:2012-01-19 10:59:20

标签: java

为什么我的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);
    }
}

2 个答案:

答案 0 :(得分:64)

java中的所有文字数字默认为ints,其范围为-21474836482147483647

您的文字超出此范围,因此要进行此编译,您需要指明它们是long文字(即后缀为L):

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

请注意,java支持大写L和小写l,但我建议使用小写l,因为它看起来像1

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 Language Specification用于相同的

  

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

答案 1 :(得分:22)

您必须使用L向编译器说明它是一个长文字。

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