代码:
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”。
答案 0 :(得分:1)
c++
在System.out.print
之后递增,因此它首先打印'j'。
if语句的第二部分未被评估,因为f('j')
返回'k'
,因为在返回后应用了减量。
然后打印d
因为f('d')'
被调用,首先打印'd'然后打印函数'e'的结果。
如果您想了解问题为什么会出现问题,特别是如果出现意外情况,那么熟悉调试器是个好主意。通过它,您可以逐步执行每条指令,并在每个执行步骤中查看程序的状态。
作为练习,编写一个使用这些功能的程序,但打印qed
(quod erat demonstrandum)。
答案 1 :(得分:0)
在if条件中,f('j')=='k'为真,这就是为什么不检查其他条件的原因。这里f('j')方法打印j并返回'k',返回c后再次'j'。现在在System.out.println(f('d')); f('d')打印d并返回以main方法打印的e。所以输出是jde