Java 的 L 编号(长)规范

看起来,当您在Java中键入数字时,编译器会自动将其读取为整数,这就是为什么当您键入(long)(不在整数范围内)时,它会抱怨不是整数。为了纠正这一点,我必须指定.我刚刚了解了这个规范。600000000060000000006000000000L

还有其他数字规格,如短,字节,浮点,双精度吗?看起来这些会很好,因为(我假设)如果你能指定你输入的数字是一个短,那么java就不必强制转换它 - 这是一个假设,如果我错了,请纠正我。我通常会自己搜索这个问题,但我不知道这种数字规范叫什么。


答案 1

(例如)、(例如 ) 和 (例如 ) 有特定的后缀。long39832Lfloat2.4fdouble-7.832d

如果没有后缀,并且它是整数类型(例如),则假定它是 .如果它不是整数类型(例如),则假定它是 .5623int3.14159double

在所有其他情况 (, , ) 中,您需要强制转换,因为没有特定的后缀。byteshortchar

Java规范允许大写和小写后缀,但s的大写版本是首选,因为大写字母比小写字母更容易与数字混淆。longL1l

有关血腥的细节,请参阅 JLS 第 3.10 节(请参阅 的定义)。IntegerTypeSuffix


答案 2

默认情况下,任何整型基元数据类型(字节、短整型、整型、长整型)都将被 Java 编译器视为型。对于字节,只要分配给它们的值在其范围内,就没有问题,也不需要后缀。如果分配给 byteshort 的值超出其范围,则需要显式类型强制转换。

前任:

byte b = 130; // CE: range is exceeding.

以克服这种执行类型转换。

byte b = (byte)130; //valid, but chances of losing data is there.

在长数据类型的情况下,它可以毫不费力地接受整数值。假设我们分配像

long l = 2147483647; //which is max value of int

在这种情况下,不需要像 L/l 这样的后缀。默认情况下,java 编译器认为2147483647值为 int 类型。内部类型转换由编译器完成,int 自动提升为 Long 类型。

long l = 2147483648; //CE: value is treated as int but out of range 

在这里,我们需要将后缀设置为L,以便java编译器将文字2147483648视为long类型。

所以最后

long l = 2147483648L;// works fine.