为了账号安全,请及时绑定邮箱和手机立即绑定

Java的L号(长号)规范

Java的L号(长号)规范

看来,当您使用Java输入数字时,编译器会自动将其读取为整数,这就是为什么当您输入(long)6000000000(不在整数范围内)时会抱怨6000000000不是整数。要更正此问题,我必须指定6000000000L。我刚刚了解了此规范。还有其他数字规范,例如short,byte,float,double吗?似乎这些内容会很好,因为(我假设)如果您可以指定要输入的数字是短数字,则Java不必强制转换它-这是一个假设,如果我输入错误,请更正我。我通常会自己搜索这个问题,但是我什至不知道这种数字规范叫什么。
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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


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


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


Java规范允许上部和下部壳体的后缀,但是上壳体版本为longs的优选的,因为上壳体L不太容易混淆以数字1比下壳体l。


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


查看完整回答
反对 回复 2019-11-27
?
jeck猫

TA贡献1909条经验 获得超7个赞

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


主要好处:如果采纳该建议,为什么平台会更好?


像这样的代码


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

可以重新编码为


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

Joe Darcy正在监督Java 7的Project Coin,他的博客一直是跟踪这些建议的简便方法。


查看完整回答
反对 回复 2019-11-27
?
万千封印

TA贡献1891条经验 获得超3个赞

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


例如:


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编译器认为int类型的值为2147483647。内部类型转换由编译器完成,并且int自动提升为Long类型。


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

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


所以最后


Long l = 2147483648L;// works fine.


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 660 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信