2012-07-04 107 views

回答

4

Java代碼

float f1 = 1; 
    float f2 = 1f; 

編譯成字節碼如下:

 0: fconst_1  
    1: fstore_1  
    2: fconst_1  
    3: fstore_2  

正如你所看到的,有在運行時沒有區別。

6

1被隱含視爲int字面其中1f被認爲是float字面

參見

+0

是的,還有我的第二個問題:「當我寫1時,JVM會在運行時執行任何操作,還是會降低我的應用程序的速度?」 – m4tx

+1

不,不應該有任何放慢你的表現 –

3

基本上1將默認爲int。如果你寫1f它將被認爲是float。如果你寫1.0(不是f),它將默認爲double

甲浮點文字的類型爲float如果它與 ASCII字母F或f爲後綴;否則它的類型是雙倍的,並且它可以有 (可選)後綴爲ASCII字母D或d。

For more info about java data types.

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,但對於第二個示例,如果您添加一些小數點而沒有fF後綴比它會自動轉換爲double

1

是的,11f之間有很大的差異。由於您不能在java中未聲明變量而聲明變量,因此其明確的1int1f表示編譯時本身的float。這與運行時間或減慢應用程序無關。

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 a = 2.0; 
double b = 2d; 
double c = 2.0f; 
if (a == b) { 
    if (c == a) { 
     if (c == b) { 
      return 1; 
     } 
    } 
} 

將返回1;


此致。

相關問題