2013-10-21 54 views
0

考慮以下兩種方法:差異返回變量VS的表達

public int add(int i, int j) { 

    return i + j; 
} 

public int add(int i, int j) { 
    int k = i + j; 
    return k; 
} 

它們在這種情況下返回相同的值對於兩個給定的整數值作爲輸入,但在對兩種任何區別?我不確定,但我認爲使用第一個可能會有輕微的性能優勢,而有些人可能會認爲第二個更具可讀性。

個人而言,我一直只是返回的語句,比如第一種方法,但通過在NetBeans網站的教程去他們使用後者:

enter image description here

是否存在這樣一個兩個有任何情況如果只是像上面這樣的單一計算,那麼它顯着的優勢在於?

回答

3

這真的沒關係 - 編譯器會在優化過程中刪除額外的變量。幾乎總是有這樣的問題,唯一重要的是代碼的可讀性和可維護性,所以在這種情況下真的取決於你(但我寧願返回表達式,沒有額外變量的理由)。

+0

http://coding.tocea.com/tools/pmd/unnecessarylocalbeforereturn/ – Suresh

0

不會有任何性能差異,但其次幾乎沒有優勢,如果表達很大,首先會看起來有點令人毛骨悚然和混亂。

0

出於任何原因,如果您需要使用調試器運行代碼,使用第二個代碼有巨大優勢。您可以使用調試器在return k;上停止並查看即將返回的實際值。你不能用第一種形式做到這一點。

許多有經驗的程序員養成了總是爲返回值使用變量的習慣,因此。他們從來不知道某人是否需要稍後在代碼上使用調試器。

+4

「你可以快樂用第一種形式做這件事。「 - 取決於調試器。有些人很好。 –

+0

好吧,公平點。但大多數調試器不會這樣做。特別是Eclipse和IntelliJ附帶的調試器不會這樣做。更好地考慮到代碼將被調試器不執行此操作的人調試的情況。 –

+0

@DavidWallace你絕對可以在Eclipse中做到這一點。雖然不知道IntelliJ(但是如果IntelliJ不能這樣做,我會感到很驚訝) – SrikanthLingala

2

第二種方法使調試更容易(「返回k」行是斷點的理想選擇)。

0

這兩種方式都很好。但事情是建立在上下文之上的。

考慮下面的例子。

這絕對乾淨,更具可讀性。

public int add(int i, int j) { 

    return i + j; 
} 

現在,在某些情況下我們看看會發生什麼情況

public int calculate(int i, int j) { 
     int k= doAnotherCal(i,j); 
     int result= getThisDone(x); 
     return result; 
    } 

所以它只是事情的背景和可讀性。如果您擔心內存/性能,現代JVM就足以解決大部分內存相關問題。

目標爲可讀的代碼,所以每個人都在地球上會在年底:)