1. 程式人生 > >透析Java本質-運算順序的詳細挖掘

透析Java本質-運算順序的詳細挖掘

package com.java.essence_36;

import java.util.Arrays;

/**
 * Created by lw on 14-5-18.
 * 註釋僅代表個人想法,具體結果run後檢視
 * <p/>
 * 運算順序的詳細挖掘
 * <p/>
 * 運算元從左向右的計算規則與運算子的結合性無關,就算運算子是由右向左結合的,也會在運算之前先確定左側的運算元。
 * <p/>
 * 複合運算子自動將右側的計算結果型別轉換為左側運算元的結果型別,如demo_5方法例項
 * <p/>
 * 方法引數傳遞也是這樣嗎?如demo_7方法例項
 */
public class Order {

    private static void demo_1() {

        int i = 5;
        int j = (i++) + (i++) + (i++);//j=5+6+7

        System.out.println("demo_1()->i=" + i);
        System.out.println("demo_1()->j=" + j);
    }

    private static void demo_2() {

        int[] a = {0, 0, 0, 0, 0, 0, 0};

        int i = 2;
        a[++i] = i++;   //a[3]=3;i=3+1;
        System.out.println("demo_2()->i=" + i);
        System.out.println("demo_2()->a[]=" + Arrays.toString(a));
    }

    private static void demo_3() {

        int[] a = {10, 10, 10, 10, 10, 10, 10};

        int i = 2;
        a[i] = i = 4;//a[2]=4
        System.out.println("demo_3()->i=" + i);
        System.out.println("demo_3()->a[]=" + Arrays.toString(a));
    }

    private static void demo_4() {

        int[] a = {10, 10, 10, 10, 10, 10, 10};
        int[] b = {20, 20, 20, 20, 20, 20, 20};
        int[] c = a;
        int i = 5;
        a[--i] = (a = b)[i]; //a[4]=b[4];
        System.out.println("demo_4()->i=" + i);
        System.out.println("demo_4()->a[]=" + Arrays.toString(a));
        System.out.println("demo_4()->b[]=" + Arrays.toString(b));
        System.out.println("demo_4()->c[]=" + Arrays.toString(c));
    }


    private static void demo_5() {
        byte i = 1;
        //i=i+1;//error
        i += i;
    }

    private static void demo_6() {

        int a = 10;
        a += ++a;//a=a+(++a);10+11?
        System.out.println("demo_6()->a=" + a);

        int array[] = {0, 1, 2, 3, 4, 5};
        int b = 1;
        array[b] *= b = 2;//array[1]=array[1]*2;
        System.out.println("demo_6()->b=" + b);
        System.out.println("demo_6()->array[]=" + Arrays.toString(array));
    }


    private static void demo_7(int x, int y, int z) {
        System.out.println("demo_7()->x=" + x);
        System.out.println("demo_7()->y=" + y);
        System.out.println("demo_7()->z=" + z);
    }

    public static void main(String[] args) {
        //demo_1----6();

        int i = 1;
        demo_7(++i, --i, i++);
    }
}