2012-04-06 68 views
3
class C{ 
    static int f1(int i) { 
     System.out.print(i + ","); 
     return 0; 
    } 

    public static void main (String[] args) { 
     int i = 0; 
     i = i++ + f1(i); 
     System.out.print(i); 
    } 
} 

怎麼回答的是1,0。 請解釋。不明白這段代碼片段的答案(java)

+1

您是否嘗試一步一步地進行調試? – 2012-04-06 08:53:12

回答

2
i = i++ + f1(i); 

第一i遞增1,並調用F1(1)有打印I,它打印1,和通過計算返回0,其存儲在主要方法0 + 0,則在打印它在主所以輸出變成1,0

+1

它是如何存儲在'我'? – 2012-04-06 08:58:30

+2

請注意,表達式「i ++」的值是i在遞增之前的值,所以'i = i ++ + f1(i)'將會是'i = 0 + f1(1)' – Anthales 2012-04-06 09:00:59

5

看的表達:

你需要了解這裏
i = i++ + f1(i); 

一件事到底是什麼呢i++返回:它增加i,但返回的i值。因此,如果i == 0,然後i++增量i1,但表達式的結果值是0

在Java中,表達式從左到右計算。因此,在上述表達式中,首先對i++進行評估,然後對f1(i)進行評估。

之後i++,i == 1所以f1(i)實際上是f1(1)。此方法打印i的值,即1,後面帶逗號,並返回0

由於i++返回i舊值(它被遞增之前),則表達式變爲:

i = 0 + 0; 

第一0i++的結果,第二0f1(i)結果。所以,i分配0。最後,您打印i的值。

+0

+1 i ++遞增值但返回舊值。 – 2012-04-06 09:10:15

+0

美麗。謝謝 – 2012-04-06 11:18:21