在解决一道面试题目时遇到问题。
public class Inc { public static void main(String args[]){ Inc inc = new Inc(); int i =0; inc.fermin(i); i=i++; System.out.println(i); } void fermin(int i){ i++; } }
题目答案是输出0。
查阅相关资料时,才知道i=i++这一步,真实执行情况是temp = i;i=i+1;i=temp;
未验证真是如此,我将代码改为如下:
public class Inc { public static void main(String args[]){ Inc inc = new Inc(); int i =0; inc.fermin(i); int j=i++; System.out.println(j); } void fermin(int i){ i++; } }
输出结果依旧是0,这符合预期。即:temp=i;i=i+1;j=temp;
而不仅仅是像有些C/C++那样只执行了i++这一步。
实际上,i=i++,亦或是j=i++之后由于执行i++这步,i的值都会有所增加,只是之后i(/j)=temp这步又将i值变回去,所以只要将代码改成如下这样就可以看到i值的变化了:
public class Inc { public static void main(String args[]){ Inc inc = new Inc(); int i =0; inc.fermin(i); int j=i++; System.out.println(i); } void fermin(int i){ i++; } }
输出的结果是1。
说到底其实还是编译器的问题,没必要过分纠结于此!