看来,当你在Java中输入一个数字时,编译器会自动将其读作一个整数,这就是为什么当你输入(long)6000000000
(不在整数范围内)时,它会抱怨{ {1}}不是整数。为了纠正这个问题,我必须指定6000000000
。我刚刚了解了这个规范。
还有其他数字规格,例如short,byte,float,double吗?这似乎是好事,因为(我假设),如果你可以指定你输入的数字是短的,那么java就不必抛出它 - 这是一个假设,如果我错了,请纠正我。我通常会自己搜索这个问题,但我不知道甚至会调用这种数字规范。
答案 0 :(得分:158)
long
(例如39832L
),float
(例如2.4f
)和double
(例如-7.832d
)有特定的后缀。
如果没有后缀,并且它是整数类型(例如5623
),则假定它是int
。如果它不是整数类型(例如3.14159
),则假定它是double
。
在所有其他情况下(byte
,short
,char
),您需要演员,因为没有特定的后缀。
Java规范允许使用大写和小写后缀,但优选long
s的大写版本,因为大写L
不容易与数字{{1}混淆比小写1
。
有关详细信息,请参阅JLS section 3.10(请参阅l
的定义)。
答案 1 :(得分:13)
我希望你不会介意轻微的切线,但是你可能有兴趣知道除了F
(浮动),D
(换双)和L
(很长时间),a proposal has been made分别为byte
和short
- Y
和S
添加后缀。当使用字节(或短)数组的文字语法时,这将消除转换为字节的需要。引用提案中的示例:
主要好处:为什么是平台 如果提案获得通过会更好吗?
像
这样的代码byte[] stuff = { 0x00, 0x7F, (byte)0x80, (byte)0xFF};
可以重新编码为
byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };
Joe Darcy正在监督Java 7的Project Coin,his blog是跟踪这些提案的简单方法。
答案 2 :(得分:8)
这些是文字,在Java语言规范的section 3.10中有描述。
答案 3 :(得分:6)
默认情况下,java编译器将任何整数原始数据类型(byte,short,int,long)视为 int 类型。对于 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那样的后缀。默认值2147483647被java编译器认为是int类型。内部类型转换由编译器完成,int自动提升为Long类型。
Long l = 2147483648; //CE: value is treated as int but out of range
这里我们需要将后缀作为L来将java文件2147483648作为long类型处理。
所以最后
Long l = 2147483648L;// works fine.
答案 4 :(得分:1)
看起来这些会很好 因为(我假设)你是否可以 指定您输入的号码是 简短然后java不必 施展它
由于文本的解析发生在编译时,因此在性能方面绝对无关紧要。 short
和byte
后缀的唯一原因是它会导致更紧凑的代码。
答案 5 :(得分:0)
考虑:
long l = -1 >>> 1;
与
int a = -1;
long l = a >>> 1;
现在您希望麻烦的代码片段为变量l
提供相同的值。因此,我们需要将int
文字表达为int
s。
答案 6 :(得分:0)
Java 有两种数据类型:
某些数据类型需要 long、float 和 double 等规范。
在将上述任何数据类型分配给任何变量时,请始终记住....
示例:
长数 = 15000000000L;
浮动 mysecondnum = 5.75f;
double mynumber = 19.99d;
更多信息:
long 数据类型的精度级别最多为 7-8 个小数点,而 float 数据类型的精度级别最多为 15 个小数点。
编辑:
与此类型转换一起,可用于将原始数据类型从一种更改为另一种。