Java的L数(长)规范

看起来,当你在Java中键入一个数字时,编译器会自动把它作为一个整数来读取,这就是为什么当你input(long)6000000000(不在整数范围内)时,会抱怨说6000000000不是一个整数。 为了纠正这个问题,我不得不指定6亿次。 我刚刚了解了这个规范。

有其他的数字规格,如短,字节,浮点数,双? 这似乎是好的,因为(我认为),如果你可以指定你input的数字是一个简短的,那么Java不必投它 – 这是一个假设,纠正我,如果我错了。 我通常会自己search这个问题,但是我不知道这种数字规范甚至被称为什么。

long (如39832L ), float (例如2.4f )和double float (例如2.4f )有特定的后缀。

如果没有后缀,并且是一个整数types(例如5623 ),则假定它是一个int 。 如果它不是一个整数types(例如3.14159 ),则假定它是一个double 3.14159型。

在所有其他情况下( byteshortchar ),你需要演员,因为没有特定的后缀。

Java规范允许大写和小写后缀,但大写字母版本long字符是首选的,因为大写字母L与小写字母l不易与数字1混淆。

有关详细信息,请参阅JLS第3.10节 (请参阅IntegerTypeSuffix的定义)。

我希望你不会介意有一点切线,但是你可能有兴趣知道除了F (用于float), D (用于double)和L (用于long)之外, 还有一个build议是为byte添加后缀和shortYS分别。 这将消除在使用byte(或short)数组的文字语法时需要转换为字节的需要。 从提案中引用例子:

主要收益:如果提案被采纳,为什么平台更好?

cruddy代码像

  byte[] stuff = { 0x00, 0x7F, (byte)0x80, (byte)0xFF}; 

可以被重新编码为

  byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy }; 

Joe Darcy正在监督Java 7的Project Coin, 他的博客是追踪这些提议的简单方法。

这些是文字,在Java语言规范的第3.10节中有描述。

默认情况下,Java编译器会将任何整数基本数据types(byte,short,int,long)视为inttypes。 对于字节 ,只要分配给它们的值在它们的范围内,没有问题,并且不需要后缀。 如果分配给byteshort的值超出了范围,则需要显式types转换。

例如:

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

克服这种执行型铸造。

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

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

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

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

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

在这里,我们需要把后缀L作为长时间的java编译器对待2147483648。

最后

 Long l = 2147483648L;// works fine. 

这似乎是这样会很好,因为(我假设),如果你可以指定你input的数字是一个简短的,那么Java不必投它

由于文字的parsing发生在编译时,这在性能方面是绝对不相关的。 有shortbyte后缀的唯一原因将是很好的是,它导致更紧凑的代码。

考虑:

 long l = -1 >>> 1; 

 int a = -1; long l = a >>> 1; 

现在你会期望麻烦的代码段给variablesl赋予相同的值。 所以我们需要在int文字上expression为int