1

代码:

public static char f( char c ){

 System.out.print( c++ );
       return c--;
    }

    public static void main(String[] args)
    {
       if( f('j') == 'k' || f('f') == 'f'){
          System.out.println( f('d') );
       }
    }

有人可以向我解释为什么这会打印“jde”吗?直觉上,我认为它会打印“kged”。

4

3 回答 3

8

表达式c++的值是c它增加之前的值。并且表达式c--的值是它被递减之前的值。

f因此,在您的示例中的第一次调用中,c'j'. 然后该行System.out.println(c++);打印'j'并递增c,所以现在是k。在下一行,它返回 的新值c,即'k'

由于if条件的前半部分为真,因此不评估后半部分。我们直接跳进了身体if。但这与以前的工作方式相同 - 它打印'd'并返回'e'。然后'e'打印。

于 2013-11-12T08:00:40.113 回答
1

c++在 之后递增System.out.print,因此它首先打印 'j'。

if 语句的第二部分没有被评估,因为在f('j')返回'k'后应用了减量。

然后d被打印,因为f('d')'它首先打印'd',然后是函数'e'的结果。

如果您想了解为什么会出现问题,特别是如果它相当出乎意料,那么熟悉调试器是一个好主意。有了它,您可以单步执行每条指令,并在每个执行步骤中查看程序的状态。

作为练习,编写一个使用这些函数但会打印的程序qed(quod erat demostrandum)。

于 2013-11-12T08:02:15.493 回答
0

在 if 条件中 f('j')=='k' 为真,这就是为什么不检查其他条件的原因。这里 f('j') 方法打印 j 并返回 'k',返回后 c 又是 'j'。现在在 System.out.println(f('d')); f('d') 打印 d 并返回在 main 方法中打印的 e。所以输出是jde

于 2013-11-12T08:19:21.263 回答