2012-04-06 73 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