橙小张的Java后端学习之路

Java传值还是传引用的思考

2017-09-16  本文已影响22人  橙小张
public class ReferenceTest {

    @Test
    public void test1(){
        boolean flag = false;
        changeBoolean(flag);
        System.out.println(flag);   //false
    }

    private void changeBoolean(boolean flag){
        flag = !flag;
    }


    @Test
    public void test2(){
        StringBuffer sb = new StringBuffer("Hello");
        changeStringBuffer(sb);
        System.out.println(sb.toString());  //Hello world
    }

    private void changeStringBuffer(StringBuffer stringBuffer) {
        stringBuffer.append(" world");
    }


    @Test
    public void test3(){
        String s = "Hello";
        changeString(s);
        System.out.println(s);  //Hello
    }

    private void changeString(String string) {
        System.out.println(string);
        string = "world";
        System.out.println(string);
    }

    @Test
    public void test4(){
        int a = 1;
        int[] data = new int[1];
        changeInt(data, a);
        System.out.println(a);  //1
        System.out.println(data[0]); //2
    }

    private void changeInt(int[] data, int a){
        a = 2;
        data[0] = a;
    }

    @Test
    public void test5(){
        int a = 1;
        int b = a;
        a = 2;
        System.out.println(b);  //1
    }


    /*
    // access flags 0x1
      public test6()V
      @Lorg/junit/Test;()
       L0
        LINENUMBER 72 L0
        ICONST_1
        ISTORE 1
       L1
        LINENUMBER 73 L1
        ILOAD 1
        ISTORE 2
       L2
        LINENUMBER 74 L2
        ICONST_2
        ISTORE 1
       L3
        LINENUMBER 75 L3
        GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
        ILOAD 2
        INVOKEVIRTUAL java/io/PrintStream.println (I)V
       L4
        LINENUMBER 76 L4
        RETURN
       L5
        LOCALVARIABLE this Lcom/sailfish/learnjava/base/ReferenceTest; L0 L5 0
        LOCALVARIABLE a I L1 L5 1
        LOCALVARIABLE b I L2 L5 2
        MAXSTACK = 2
        MAXLOCALS = 3
    }
     */
    @Test
    public void test6(){
        int a = 1;
        int b = a;
        a = 2;
//        System.out.println(b);
    }


}
/*
test6
L0
    LINENUMBER 105 L0
    ICONST_1
    ISTORE 1
   L1
    LINENUMBER 106 L1
    ILOAD 1
    ISTORE 2
   L2
    LINENUMBER 107 L2
    ICONST_2
    ISTORE 1
 */
上一篇 下一篇

猜你喜欢

热点阅读