你真的懂i++和++i吗?从字节码理解它吧!
i++ 在初次学习 i++ 和 ++i 时我们就一直牢记着: i++ 是先使用后加1, ++i 是先加1再使用,长时间都一直这样搬着砖(这结论当然是没毛病的),我也是。直到我看见了下面的题目。 public static void func ( ) { int i = 0 ; for ( int j = 0 ; j < 100 ; j ++ ) { i = i ++ ; } Stystem . out . println ( i ) ; //打印什么??? } 我是觉得打印100的,毫无疑问,我错了。 对了也就没此文了。 看来我还是太菜了,看看字节码吧! 0 iconst_0 1 istore_0 2 iconst_0 3 istore_1 4 iload_1 5 bipush 100 7 if_icmpge 21 ( + 14 ) 10 iload_0 11 iinc 0 , 1 14 istore_0 15 iinc 1 , 1 18 goto 4 ( - 14 ) 21 getstatic # 2 < java / lang / System . out > 24 iload_0 25 invokevirtual # 3 < java / io / PrintStream . println > 28 return 其中10~14对应的就是 i=i++ 的字节码