看来,当您在Java中输入数字时,编译器会自动将其读为整数,这就是为什么当您输入(Long)时 6000000000 (不在整数范围内)会抱怨 6000000000 不是整数。要纠正这一点,我必须指定 6000000000L. 。我刚刚了解了这一规范。

还有其他数字规格,例如短,字节,浮点,双重吗?似乎有这些好,因为(我假设)如果您可以指定您输入的数字很短,那么Java就不必施放它 - 这是一个假设,如果我错了,请纠正我。我通常会自己搜索这个问题,但我不知道这种数字规范是什么。

有帮助吗?

解决方案

有特定后缀 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).

其他提示

我希望您不要介意有点切线,但认为您可能有兴趣知道 F (对于浮动), D (双重), L (长期), 提出了一项建议 添加后缀 byteshortYS 分别。在使用字节(或短)数组的文字语法时,这将消除对字节施放的需求。引用该提案的示例:

主要好处:如果采用该提案,为什么平台更好?

像粗糙的代码一样

 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就不必施放它

由于文字的解析是在编译时发生的,因此与性能无关。唯一的原因 shortbyte 后缀会很好,是它导致更紧凑的代码。

考虑:

long l = -1 >>> 1;

相对

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

现在,您希望打扰代码片段会给变量相同的值 l. 。所以我们需要表达 int 文学要做 ints。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top