在Java中,在定义浮点变量之间是否有任何区别,例如:1
和这个:1f
?当我写1
时,JVM是否在运行时进行任何强制转换,或者是什么可能会减慢我的应用程序?
此致
答案 0 :(得分:6)
答案 1 :(得分:4)
Java代码
float f1 = 1;
float f2 = 1f;
编译为以下字节码:
0: fconst_1
1: fstore_1
2: fconst_1
3: fstore_2
如您所见,在运行时没有区别。
答案 2 :(得分:4)
float a = 1;
float b = 1f;
它是一样的,但如果你做了类似的事情:
int a = 1f
将抛出“类型不匹配:无法从float转换为int”
int b = 1d or 1.0
将抛出“类型不匹配:无法从double转换为int”
float c = 1d or 1.0
将抛出“类型不匹配:无法从double转换为float”
请注意:
double a = 2.0;
double b = 2d;
double c = 2.0f;
if (a == b) {
if (c == a) {
if (c == b) {
return 1;
}
}
}
将返回1;
问候。
答案 3 :(得分:3)
基本上1
默认为int
。如果您撰写1f
,则会将其视为float
。如果你写1.0
(没有f),它将默认为double
。
浮点文字的类型为float,如果后缀为 ASCII字母F或f;否则它的类型是双倍的,它可以 可选地以ASCII字母D或d为后缀。
答案 4 :(得分:2)
如果是这样的情况,JVM将通过它。
public class Test {
public static void main(String[] args) {
float f = 1;
System.out.println(f);
}
}
但是如果你这样做会发生异常:
public class Test {
public static void main(String[] args) {
float f = 1.5;
}
}
例外:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - possible loss of precision
required: float
found: double
at package.Test.main(Test.java:17)
我们可以为这两个例子分析的是,对于第一个示例,它会自动转换为float
,但对于第二个示例,如果添加一些小数点而没有f
或{ {1}}后缀比自动转换为F
。
答案 5 :(得分:1)
是的,1
和1f
之间存在很大差异。由于您无法在不给出java类型的情况下声明变量,因此在编译时它的1
是int
而1f
表示float
。这与运行时间或减慢应用程序无关。