Java的L号(长)规范

jbu*_*jbu 91 java specifications numbers short long-integer

看来,当你在Java中输入一个数字时,编译器会自动将它读作一个整数,这就是为什么当你输入(long)6000000000(不在整数范围内)时,它会抱怨它6000000000不是一个整数.要纠正这个问题,我必须指明6000000000L.我刚刚了解了这个规范.

还有其他数字规格,如short,byte,float,double?这似乎是好事,因为(我假设),如果你可以指定你输入的数字是短的,那么java就不必抛出它 - 这是一个假设,如果我错了,请纠正我.我通常会自己搜索这个问题,但我不知道甚至会调用这种数字规范.

Sim*_*son 168

long(例如39832L),float(例如2.4f)和double(例如-7.832d)存在特定的后缀.

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

在其他情况下(byte,short,char),你需要投,因为没有具体的后缀.

Java规范允许大写和小写后缀,但longs 的大写版本是首选,因为大写L不容易与数字混淆而1不是小写l.

有关血淋淋的细节,请参阅JLS第3.10节(参见定义IntegerTypeSuffix).

  • 迟到:删除潜在的歧义来源总是好的,*我不反对*...但我相信如果你发现自己混淆了`1`和`l`以及`0`和'O`(等等) ),你的*优先级*是设置正确的字体(如果可以的话),然后担心确保你不会错过Shift键. (8认同)
  • @DavidCesarino更改字体可以为您解决歧义-在您将其正确设置的特定编辑器中。将l更改为L可以解决_everybody_的歧义,因为他们可能会在您使用不同的Editor,IDE并在Web上查看源代码(查看工具,存储库等)时读取包括您自己在内的代码。恕我直言,优先事项是不要错过Shift键。顺便说一句。你推荐什么字体?我喜欢等宽字体,这几乎是我所见过的所有编辑器,CLI等中的默认字体,并且这种字体中的`l`和`1`(`0`和`O`分别)非常相似。 (2认同)

eri*_*son 13

我希望你不会介意轻微的切线,但是你可能有兴趣知道除了F(浮动),D(对于双倍)和L(长期),已经提出一个建议来为byteshort- YS分别添加后缀.当使用字节(或短)数组的文字语法时,这将消除转换为字节的需要.引用提案中的示例:

主要好处:如果提案获得通过,为什么平台会更好?

肮脏的代码就像

 byte[] stuff = { 0x00, 0x7F, (byte)0x80,  (byte)0xFF};
Run Code Online (Sandbox Code Playgroud)

可以重新编码为

 byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };
Run Code Online (Sandbox Code Playgroud)

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


McD*_*ell 8

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


小智 8

默认情况下,java编译器将任何整数原始数据类型(byte,short,int,long)视为int类型.对于字节短路,只要分配给它们的值在它们的范围内,就没有问题,也不需要后缀.如果分配给byteshort的值超出其范围,则需要显式类型转换.

例如:

byte b = 130; // CE: range is exceeding.
Run Code Online (Sandbox Code Playgroud)

克服这种执行型铸造.

byte b = (byte)130; //valid, but chances of losing data is there.
Run Code Online (Sandbox Code Playgroud)

在长数据类型的情况下,它可以毫无困难地接受整数值.假设我们分配了

Long l = 2147483647; //which is max value of int
Run Code Online (Sandbox Code Playgroud)

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

Long l = 2147483648; //CE: value is treated as int but out of range 
Run Code Online (Sandbox Code Playgroud)

这里我们需要将后缀作为L来将java文件2147483648视为long类型.

所以最后

Long l = 2147483648L;// works fine.
Run Code Online (Sandbox Code Playgroud)