十进制整数文字

整数文字提供的值可以在需要 byteshortintlongchar 实例的地方使用。 (这个例子侧重于简单的十进制形式。其他例子解释了八进制,十六进制和二进制的文字,以及使用下划线来提高可读性。)

普通的整数文字

最简单和最常见的整数文字形式是十进制整数文字。例如:

 0       // The decimal number zero       (type 'int')
 1       // The decimal number one        (type 'int')
 42      // The decimal number forty two  (type 'int')

你需要小心前导零。前导零使整数文字被解释为八进制而不是十进制。

 077    // This literal actually means 7 x 8 + 7 ... or 63 decimal!

整数文字是无符号的。如果你看到这样 -10+10,这些其实都是表达式使用一元 - 和一元+运算符。

此形式的整数文字范围具有固有类型 int,并且必须落在 0 到 2 31 或 2,147,483,648 的范围内。

请注意,2 311 大于 Integer.MAX_VALUE。从 0 到 2147483647 的文字可以在任何地方使用,但是如果没有前面的一元 - 运算符,使用 2147483648 是一个编译错误。 (换句话说,它保留用于表示 Integer.MIN_VALUE 的值。)

 int max = 2147483647;     // OK
 int min = -2147483648;    // OK
 int tooBig = 2147483648;  // ERROR

长整数文字

long 类型的文字通过添加 L 后缀来表示。例如:

 0L          // The decimal number zero       (type 'long')
 1L          // The decimal number one        (type 'long')
 2147483648L // The value of Integer.MAX_VALUE + 1

 long big = 2147483648;    // ERROR
 long big2 = 2147483648L;  // OK

请注意,intlong 文字之间的区别在其他地方很重要。例如

 int i = 2147483647;
 long l = i + 1;           // Produces a negative value because the operation is
                           // performed using 32 bit arithmetic, and the 
                           // addition overflows
 long l2 = i + 1L;         // Produces the (intuitively) correct value.

参考: JLS 3.10.1 - 整数文字