所以我理解,如果我声明一个长变量,我需要在数字末尾添加一个L。
long x = 123L;
与float类型相同,我需要在变量的末尾添加一个F.
float x = 1.1F;
但我想知道为什么它在这两种情况下做得与众不同? 我的意思是如果我声明一个int或任何其他数据类型,只需
int x = 1;
为什么声明这两种数据类型是在某种情况下完成的(对于long和float类型)。我知道它是这样完成的,我只是想了解为什么这样做是这样的?
答案 0 :(得分:4)
区别在于文字值。根据{{3}},字面数值属于int
和double
类型。
如果整数文字的后缀为ASCII字母
类型long
或L
(ell),则其类型为l
;否则它是int
(Java Language Specification. Chapter 3. Lexical Structure. 3.10 Literals)(...)
浮点文字的类型为
float
,如果后缀为ASCII字母F
或f
;否则其类型为double
,并且可以选择以ASCII字母D
或d
(§4.2.1)为后缀。
答案 1 :(得分:0)
在示例中,您提到后缀似乎是多余的,但还有其他情况,例如使用两个重载方法test(long x)
和test(int x)
。文字参数是否使用后缀L
将决定调用哪一个,例如test(123L)
将调用第一个,而test(123)
将调用第二个。而且你不希望杂乱的代码带有不必要的后缀,因此没有后缀I
(也不是D
),而123
对于{{1}类型的文字也可以。 }。
答案 2 :(得分:0)
所有关于类型安全的方式,通过这种方式你可以控制常量。因为int可以包含的信息少于长时间,所以写这样的东西是不合适的:
int variable = 1000000000000;
在C / C ++语言中允许使用它,但无论如何该值都会被闪烁。由于Java关心所有错误,您需要在数字常量的末尾指定L,这样就会出现类型不匹配错误,您需要更正值或变量类型。
答案 3 :(得分:0)
对于整数文字(int,long),默认值为int。
但是,对于浮点文字(float,double),默认值为double。这是因为使用double可能会对存储的值进行更安全的算术运算。
这就是为什么在声明浮点数或长整数时,您需要在声明时使用L
或F
专门指定它们。
答案 4 :(得分:0)
这样想,在我已声明 int a = 10; 的应用程序中,但将来,我的应用程序需要存储类似 a = 987,654,321,321,321 的值,然后这个不可能。编译器将抛出错误消息
示例强>
public class Z {
public static void main(String[] args){
int a=10;
a=987654321321321;
System.out.println(a);
}
}
汇编
G:\Java>javac Z.java
Z.java:4: error: integer number too large: 987654321321321
a=987654321321321;
^
1 error
为了解决上述问题,我们在声明变量时,清楚地告诉编译器我们要存储的值是long类型而不是int(因此,编译器在解决问题时不会有任何混淆)
public class Z {
public static void main(String[] args){
long a=10L;
a=987654321321321L;
System.out.println(a);
}
}
编译并执行上述代码
G:\Java>javac Z.java
G:\Java>java Z
987654321321321
<强> INT:强>
Int数据类型是32位带符号的二进制补码整数。
最小值为 - 2,147,483,648。( - 2 ^ 31)
最大值为2,147,483,647(含)。(2 ^ 31 -1)
Int通常用作整数值的默认数据类型,除非存在对内存的担忧。
默认值为0.
示例:int a = 100000,int b = -200000
<强>长:强>
长数据类型是64位带符号的二进制补码整数。
最低值为-9,223,372,036,854,775,808。( - 2 ^ 63)
最大值为9,223,372,036,854,775,807(含)。 (2 ^ 63 -1)
当需要比int更宽的范围时使用此类型。
默认值为0L。
示例:long a = 100000L,int b = -200000L
答案 5 :(得分:0)
根本不是宣言。我没有进入冗长的答案。只需先试试这个
System.out.println(123L);
然后
System.out.println(123F);
那应该为你清楚:)