java 的 i++ 和 ++i 的區別

我知道網上有很多這樣的文章了,在這我只是想記錄一下,總結一下,就當備忘錄吧。

一、什麼區別?

1、i++ 先運算再加一,++i先加一再運算

2、i++ 有中間變量,++i 沒有,理論上++i 相對運行快點

二、代碼(代碼裏有詳細的解釋) 

/**
 * 總結:i++ 最終去相加的都是中間變量 temp,請看例子
 * @author tingliu
 * @create 2017-12-19 11:11
 **/
public class PlusTest {

    @Test
    public void test() {
        String[] k = new String[2];
        int i = 0;
        while (i < 2) {
            k[i++] = "d";
            System.out.println(k);
        }
    }

    /**
     * i = i++ 等價於
     * temp = i;
     * i = i + 1;
     * i = temp
     * 總結:i++ 有中間緩存變量
     * <p>
     * //Warning: The assignment to variable j has no effect
     * j = ++j 相當於 j = j = j + 1
     * 所以編譯器警告, 語句的賦值沒有作用
     * <p>
     * ++i 沒有中間緩存變量, 理論上比 i++ 更加高效
     */
    @Test
    public void test1() {
        int i = 0;
        i = i++;
        System.out.println(i);

        int j = 0;
        j = ++j;
        System.out.println(j);

        int k = 0;
        k++;
        System.out.println(k);
    }

    @Test
    public void test2() {
        int i = 0;
        for (int j = 0; j < 10; j++) {
            /**
             temp=i;
             i=temp+1;
             i=temp;
             */
            i = i++;
        }
        System.out.println("i的最後結果" + i);
    }

    @Test
    public void test3() {
        int i = 3;
        int count = (i++) + (i++) + (i++);//count=3+4+5,你可以用count=(i++)+(i++);這時會等於7
        System.out.println(i);//i=6
        System.out.println(count);//count=12
        int j = 3;
        count = (++j) + (++j) + (++j);//count=4+5+6
        System.out.println(j);//j=6
        System.out.println(count);//count=15
    }

    @Test
    public void test4() {
        /**
         * a++ 等價於
         * temp=a // temp =0
         * a=temp+1 // a=1
         *
         * ++a 等價於
         * a=a+1 // a=2
         *
         * 所以 a++ + ++a 的過程:
         * temp=a // temp =0
         * a=temp+1 // a=1
         * a+1   // a=2
         * 最終就如下
         *  temp+a=0+2=2
         */
        int a = 0, b = 0;
        b = a++ + ++a; //0+2=2
        System.out.println("a:" + a);
        System.out.println("b:" + b);

        int a1 = 0, b1 = 0;
        b1 = ++a1 + a1++; //1+1=2
        System.out.println("a1:" + a1);
        System.out.println("b1:" + b1);
    }

    @Test
    public void test5() {
        /**
         *  c=0
         *  temp=c // temp =0
         *  c=temp+1 // c=1
         *  c=c+1 // c=2
         *
         *  temp+c=0-2=-2
         */
        int c = 0, d = 0;
        d = c++ - ++c; //0+2=2
        System.out.println("d:" + d);

        int i = 0;
        i = i++ + ++i; //0+1+1=2
        int j = 0;
        j = ++j + j++ + j++ + j++;// 1+1+2+3=7
        int k = 0;
        k = k++ + k++ + ++k;// 0+1+2+1=4
        int h = 0;
        h = ++h + ++h; // 1+2=3
        int p1 = 0, p2 = 0, q1 = 0, q2 = 0;
        q1 = ++p1;// p1=1 q1=1
        q2 = p2++; // p2=1 q2=0
        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);
    }
}

代碼地址:https://github.com/tingliu9/basic-test/blob/master/src/test/java/com/github/tingliu/basic/test/PlusTest.java

 

文中有些是摘抄別人的,但是忘記出處了。還望見諒

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章