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)。
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,他的博客一直是跟踪这些建议的简便方法。
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.
添加回答
举报