Java';s L编号(长)规格
似乎当您在Java中键入数字时,编译器会自动将其读取为整数,这就是为什么当您键入(长)Java';s L编号(长)规格,java,numbers,long-integer,short,specifications,Java,Numbers,Long Integer,Short,Specifications,似乎当您在Java中键入数字时,编译器会自动将其读取为整数,这就是为什么当您键入(长)600000000(不在整数范围内)时,它会抱怨600000000不是整数。要更正此问题,我必须指定600000000l。我刚刚了解了这个规范 是否有其他数字规格,如短、字节、浮点、双精度?这似乎是一个很好的选择,因为(我假设)如果你可以指定你输入的数字是一个短数字,那么java就不必强制转换它了——这是一个假设,如果我错了,请纠正我。我通常会自己搜索这个问题,但我甚至不知道这种数字规范叫什么。要理解为什么有必
600000000
(不在整数范围内)时,它会抱怨600000000
不是整数。要更正此问题,我必须指定600000000l
。我刚刚了解了这个规范
是否有其他数字规格,如短、字节、浮点、双精度?这似乎是一个很好的选择,因为(我假设)如果你可以指定你输入的数字是一个短数字,那么java就不必强制转换它了——这是一个假设,如果我错了,请纠正我。我通常会自己搜索这个问题,但我甚至不知道这种数字规范叫什么。要理解为什么有必要区分
int
和long
文字,请考虑:
long l = -1 >>> 1;
对
int a = -1;
long l = a >>> 1;
现在,正如您所期望的,两个代码片段为变量l
提供了相同的值。如果不能区分int
和long
文字,那么-1>>1
的解释是什么
-1L >>> 1 // ?
或
因此,即使数字在公共范围内,我们也需要指定类型。如果默认值随文字的大小而改变,那么仅仅通过改变数字,表达式的解释就会发生奇怪的变化
对于
byte
、short
和char
不会发生这种情况,因为它们总是在执行算术和按位操作之前升级。可以说,它们应该是整数类型后缀,用于数组初始化表达式中,但实际上没有float
使用后缀f
和double
d
。其他文字有明确的类型,其中有一种特殊类型用于null
这些是文字,在Java语言规范中有描述。对于long
(例如39832L
)、float
(例如2.4f
)和double
(例如-7.832d
)有特定的后缀
如果没有后缀,并且是整数类型(例如5623
),则假定它是int
。如果它不是一个整数类型(例如3.14159
),则假定它是一个double
在所有其他情况下(byte
,short
,char
),您需要强制转换,因为没有特定的后缀
Java规范允许大写和小写后缀,但首选long
s的大写版本,因为大写L
比小写L
更不容易与数字1
混淆
有关血淋淋的详细信息,请参见。我希望您不介意略微相切,但我想您可能有兴趣知道,除了
F
(表示浮点)、D
(表示双精度)和L
(表示长时间)之外,分别为byte
和short
-Y
和S
添加后缀。这将消除对字节(或短)数组使用文字语法时转换为字节的需要。引用提案中的例子:
主要好处:为什么是平台
如果这项建议被采纳会更好吗
粗俗的代码
byte[] stuff = { 0x00, 0x7F, (byte)0x80, (byte)0xFF};
可重新编码为
byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };
Joe Darcy正在监督Java7的Coin项目,这是跟踪这些提案的一种简单方法
看来这些对你来说是件好事
因为(我想)如果你可以的话
指定要键入的号码为
一个简短的java就不需要了
投
由于文本的解析发生在编译时,这与性能完全无关。拥有
short
和byte
后缀的唯一原因是它可以使代码更加紧凑。默认情况下,java编译器会将任何整数基元数据类型(byte、short、int、long)视为int类型。对于byte和short,只要分配给它们的值在它们的范围内,就没有问题,也不需要后缀。若分配给byte和short的值超出其范围,则需要显式类型转换
例:
要克服这种情况,请执行类型转换
byte b = (byte)130; //valid, but chances of losing data is there.
对于长数据类型,它可以轻松地接受整数值。假设我们分配类似的任务
Long l = 2147483647; //which is max value of int
在这种情况下,不需要像L/L这样的后缀。默认情况下,java编译器认为值2147483647为int类型。内部类型转换由编译器完成,int自动升级为Long类型
Long l = 2147483648; //CE: value is treated as int but out of range
在这里,我们需要将后缀设置为L,以便java编译器将文字2147483648视为长类型
所以最后
Long l = 2147483648L;// works fine.
Java有两种数据类型:
- 在双精度数据类型中,以“d”结束该值
- 在长数据类型中,以“L”结束值
- 浮点数据类型中的值以“f”结尾
- 长数据类型的大小为8字节
- 浮点数据类型的大小为4字节
- 双精度数据类型的大小为8字节
- 加宽铸件(自动):从较小的类型到较大的类型尺寸
- 缩径铸造(手动):从大尺寸铸造到小尺寸铸造
Long l = 2147483648; //CE: value is treated as int but out of range
Long l = 2147483648L;// works fine.