一篇看懂++i i++

/**
 * @Title:Test03
 * @Description:
 * @author Crazy-ZJ
 * @data 2017年9月28日上午9:38:00
 * @book 疯狂java讲义(第三版):
 */
public class Test03 {
    public static void main(String[] args){
        int i = 0;
        i = i++ + ++i;//先执行i++之后i的值为0,再执行++i,i的值为1,再补增i++ 所以结果应为 i = 0 + 2; 
        int j = 0;
        j = ++j + j++ + j++ + j++;//先执行++j之后j的值为1,再执行j++之后j的值仍然为1,再执行j++的值后j的值还是1但要补增之前的j++,
//        此时j的值变为2,再执行j++之后j的值为2,再补增j++此时j的值为3,最终结果为:j=1+1+2+3;
        int k = 0;
        k = k++ + k++ + k++ + ++k;//先执行k++之后k的值为0,再执行k++,此时要补增之前k++此时k的值为1再执行第三个k++此时补增之前的k++
//        此时k的值为2,再支持++k后k的值为3,之后再补增第三个k++此时k的值为4,所以最终结果是 k = 0+1+2+4 
        int h = 0;
        h = ++h + ++h;
        int p1=0,p2=0,q1=0,q2=0;
        p1=++q1;
        p2=q2++;
        System.out.println("i = "+i);
        System.out.println("j = "+j);
        System.out.println("k = "+k);
        System.out.println("h = "+h);
        System.out.println("p1 = "+p1);
        System.out.println("p2 = "+p2);
        System.out.println("q1 = "+q1);
        System.out.println("q2 = "+q2);
    }
}

最终输出结果为:

i = 2
j = 7
k = 7
h = 3
p1 = 1
p2 = 0
q1 = 1
q2 = 1

总结:

之前在学习i++ 和++i的时候有一个误区---我当时知道i++是在表达式运算完以后自增,++i是在自增以后再参与运算。但是这样是错误的!看上面的例子就知道,

K=k++ + k++ + k++ + ++k;这种情况 在我以前看来结果是1,其实第一个k++参与运算的时候没有自增,但在第二个k++的时候k要补增第一个K++,第三个要补增第二个,第四个要补增第三个。并不是这个表达式运算完成以后K++自增,而是在下一个K++的时候自增!!!

拼了命、尽了兴
原文地址:https://www.cnblogs.com/zj-phper/p/7605611.html