在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