在Java中,定义浮动变量(例如:1
和这个:1f
)之间有什么区别吗?当我编写1
时,JVM是否会在运行时执行任何操作?或者会导致我的应用程序变慢?Java中float“1”和float“1f”之间的区别是什么?
问候
在Java中,定义浮动变量(例如:1
和这个:1f
)之间有什么区别吗?当我编写1
时,JVM是否会在运行时执行任何操作?或者会导致我的应用程序变慢?Java中float“1”和float“1f”之间的区别是什么?
问候
Java代码
float f1 = 1;
float f2 = 1f;
编译成字节码如下:
0: fconst_1
1: fstore_1
2: fconst_1
3: fstore_2
正如你所看到的,有在运行时没有区别。
是的,还有我的第二个问题:“当我写1时,JVM会在运行时执行任何操作,还是会降低我的应用程序的速度?” – m4tx
不,不应该有任何放慢你的表现 –
基本上1
将默认为int
。如果你写1f
它将被认为是float
。如果你写1.0
(不是f),它将默认为double
。
甲浮点文字的类型为float如果它与 ASCII字母F或f为后缀;否则它的类型是双倍的,并且它可以有 (可选)后缀为ASCII字母D或d。
如果这样的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
或F
后缀比它会自动转换为double
。
是的,1
和1f
之间有很大的差异。由于您不能在java中未声明变量而声明变量,因此其明确的1
是int
而1f
表示编译时本身的float
。这与运行时间或减慢应用程序无关。
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 a = 2.0;
double b = 2d;
double c = 2.0f;
if (a == b) {
if (c == a) {
if (c == b) {
return 1;
}
}
}
将返回1;
此致。
'1'是int * literal *。 – adatapost