Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';s L编号(长)规格_Java_Numbers_Long Integer_Short_Specifications - Fatal编程技术网

Java';s L编号(长)规格

Java';s L编号(长)规格,java,numbers,long-integer,short,specifications,Java,Numbers,Long Integer,Short,Specifications,似乎当您在Java中键入数字时,编译器会自动将其读取为整数,这就是为什么当您键入(长)600000000(不在整数范围内)时,它会抱怨600000000不是整数。要更正此问题,我必须指定600000000l。我刚刚了解了这个规范 是否有其他数字规格,如短、字节、浮点、双精度?这似乎是一个很好的选择,因为(我假设)如果你可以指定你输入的数字是一个短数字,那么java就不必强制转换它了——这是一个假设,如果我错了,请纠正我。我通常会自己搜索这个问题,但我甚至不知道这种数字规范叫什么。要理解为什么有必

似乎当您在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有两种数据类型:

  • 基本数据类型
  • 非原始数据类型
  • 某些数据类型需要long、float和double等规范

    在将上述任何数据类型分配给任何变量时,请始终记住

    • 在双精度数据类型中,以“d”结束该值
    • 在长数据类型中,以“L”结束值
    • 浮点数据类型中的值以“f”结尾
    例如:

    长数=150000000L

    浮动mysecondnum=5.75f

    双倍mynumber=19.99d

    更多信息:

    • 长数据类型的大小为8字节
    • 浮点数据类型的大小为4字节
    • 双精度数据类型的大小为8字节
    长数据类型的精度级别高达7-8个小数点,而浮点数据类型的精度级别高达15个小数点

    编辑:

    除此之外,还可以使用类型转换将基本数据类型从一种更改为另一种

    • 加宽铸件(自动):从较小的类型到较大的类型尺寸
    • 缩径铸造(手动):从大尺寸铸造到小尺寸铸造
    那太好了……我
    Long l = 2147483648; //CE: value is treated as int but out of range 
    
    Long l = 2147483648L;// works fine.