2015-10-13 14 views
1

當你有一個方法返回一個原語double並且你返回一個int值Widening Primitive Conversion happens在返回一個基元double的方法中返回int是否會有性能損失?

當我們有這樣一個案例:

例子1:

double getSomething() { 
    if (someConditon()) { 
     return 0; 
    } 
    return someDoubleValue; 
} 

例子2:

double getSomething() { 
    if (someConditon()) { 
     return 0.0d; 
    } 
    return someDoubleValue; 
} 

是否有當您返回一個int值的性能損失(例如1)而不是雙重值(例2)?

如果是,最好的做法是返回值與準確的類型。那麼示例2可以返回0.0d而不是0

+1

它沒有區別*技術上*(我很確定,結果字節代碼將是相同的)。然而,爲了清楚起見,它應該是'0.0'(因爲我認爲'0'看起來很醜陋,並且不完整......) – Marco13

+1

我甚至會用'0.0d'來顯式地顯示我正在使用double,不是浮動。但這是個人選擇。 –

回答

3

只要您鍵入的文字類型可以無提示地轉換爲雙精度就沒關係。編譯器會進行轉換在編譯時,造成相同的字節代碼所有這些(注意:即使是怪異的像焦炭):

public class ReturnDouble { 

    static double returnF() { 
     return 0F; 
    } 

    static double returnD() { 
     return 0D; 
    } 

    static double returnI() { 
     return 0; 
    } 

    static double returnL() { 
     return 0L; 
    } 

    static double returnS() { 
     return (short) 0; 
    } 

    static double returnC() { 
     return '\0'; 
    } 

} 

您可以通過拆卸驗證這一點該類使用JDK中的javap實用程序。反彙編輸出是:

public class ReturnDouble { 
    public ReturnDouble(); 
    Code: 
     0: aload_0 
     1: invokespecial #1     // Method java/lang/Object."<init>":()V 
     4: return 

    static double returnF(); 
    Code: 
     0: dconst_0 
     1: dreturn 

    static double returnD(); 
    Code: 
     0: dconst_0 
     1: dreturn 

    static double returnI(); 
    Code: 
     0: dconst_0 
     1: dreturn 

    static double returnL(); 
    Code: 
     0: dconst_0 
     1: dreturn 

    static double returnS(); 
    Code: 
     0: dconst_0 
     1: dreturn 

    static double returnC(); 
    Code: 
     0: dconst_0 
     1: dreturn 
} 
1

在ex1返回的值零變爲雙值類型值。

這是因爲它的返回類型。因爲你是返回一個int原始的轉換會發生,int轉化爲double.

由於轉換爲int翻一番Widening Primitive Conversion- jls-5.1.2發生在原始類型

特定的轉換被稱爲寬元的轉換:

短整型,長整型,浮點型或雙重型

短整型,長型,浮點型或雙重型

字符爲int,長,浮動,或雙

的int長,浮動,或

0

因爲你的方法聲明它會返回一個double它總是需要返回一個double。如果您對它進行硬編碼,就像在您的示例中一樣,如果類型不匹配並且無法轉換,則可以確保編譯將失敗。

TL; DR:在這個特殊情況下,一切都起作用。如果沒有,編譯器會告訴你。

相關問題