Java的L号(长)规格
-
12-09-2019 - |
题
看来,当您在Java中输入数字时,编译器会自动将其读为整数,这就是为什么当您输入(Long)时 6000000000
(不在整数范围内)会抱怨 6000000000
不是整数。要纠正这一点,我必须指定 6000000000L
. 。我刚刚了解了这一规范。
还有其他数字规格,例如短,字节,浮点,双重吗?似乎有这些好,因为(我假设)如果您可以指定您输入的数字很短,那么Java就不必施放它 - 这是一个假设,如果我错了,请纠正我。我通常会自己搜索这个问题,但我不知道这种数字规范是什么。
解决方案
有特定后缀 long
(例如 39832L
), float
(例如 2.4f
) 和 double
(例如 -7.832d
).
如果没有后缀,并且是一个积分类型(例如 5623
),假定是 int
. 。如果不是整体类型(例如 3.14159
),假定是 double
.
在所有其他情况下(byte
, short
, char
),您需要演员表,因为没有特定后缀。
Java规格允许上情况和下情况后缀,但 long
S是优先的,作为上情况 L
与数字混淆不太容易 1
比较低的案件 l
.
看到 JLS第3.10节 有关血腥细节(请参阅 IntegerTypeSuffix
).
其他提示
我希望您不要介意有点切线,但认为您可能有兴趣知道 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的项目硬币,并 他的博客 一直是跟踪这些建议的简便方法。
这些是文字,并在 第3.10节 Java语言规格
默认情况下,任何积分原始数据类型(字节,简称,int,long)将被视为 int 键入Java编译器。为了 字节 和 短的, ,只要分配给它们的价值在其范围内,就没有问题,也不需要后缀。如果分配给 字节 和 短的 超过其范围,需要明确的铸造。
前任:
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之类的后缀。默认值2147483647由Java Compiler IS INT类型考虑。内部类型的铸件由编译器完成,INT自动促进了长期类型。
Long l = 2147483648; //CE: value is treated as int but out of range
在这里,我们需要将后缀作为l作为java编译器的长期2147483648。
最后
Long l = 2147483648L;// works fine.
似乎这些好了,因为(我认为)如果您可以指定您输入的数字很短,那么Java就不必施放它
由于文字的解析是在编译时发生的,因此与性能无关。唯一的原因 short
和 byte
后缀会很好,是它导致更紧凑的代码。
考虑:
long l = -1 >>> 1;
相对
int a = -1;
long l = a >>> 1;
现在,您希望打扰代码片段会给变量相同的值 l
. 。所以我们需要表达 int
文学要做 int
s。