2014-10-31 42 views
0

如果我有一個Java方法:對Java的渴望評估:這個例子是如何工作的?

public void foo (int a) 
{ 
    //do something 
} 

然後我把這個方法:

foo (2/0) or foo (2/4) 

什麼時候2/02/4得到評估?它是否在進入函數的輸入之前進行評估?還是在它調用函數之前進行評估? (所以是函數內部或外部評估?)


此外,還應考慮:

if (true) then { A } else { B } 

我知道將進行評估。但是即使Java是一種渴望的語言,B也不會被評估?

謝謝!

+1

此代碼是* not * Java。如果您發佈了Java代碼,請務必先編譯它! – alfasin 2014-10-31 06:17:50

+0

java使用按值調用機制,即當你調用一個使用惰性評估策略的函數時,首先評估參數,然後傳遞給函數。 – akashchandrakar 2014-11-30 19:30:35

回答

1

foo (2/0)foo (2/4)可能由編譯器進行評估,並通過一定的成果取代(雖然前者應引起運行時ArithmeticException,所以我不知道編譯器如何處理它。一般情況下,foo(a/b)進行評估作者a/b的結果傳遞給foo

在你if聲明,你是正確的,如果條件爲真,B就不會被評估

+0

@sᴜʀᴇsʜᴀᴛᴛᴀ嗯,我嘗試了Eclipse IDE中的代碼,它在運行時編譯並引發異常。我猜編譯器不會優化它。 – Eran 2014-10-31 06:22:04

+0

是的。很公平。也試過這裏。 :) – 2014-10-31 06:23:07

+0

在運行時,2/4是在函數內部還是外部求值? public void foo(int a){a + 1}。當它進入方法內部並執行a + 1時,a是0.5還是未評估2/4? – Sonya 2014-10-31 06:43:18

0

問題1:

該類型在編譯時已被檢查,表達式在運行時進行評估。表達式首先評估,然後調用方法。

例如:

foo (2/0) 

,編譯罰款和youl'l得到異常而評估在運行時的表情。

問題2:

if (true)then{ A } else { B } 

B就不會評價。這就是條件表達式的工作原理。評估這兩種表達方式都沒有意義。