• System.out,out 是 System 类内定义的静态 final PrinterStream 变量;

    public final class System {
        ...
        public final static PrinterStream out = null;
        ...
    }

0. 总论

  • 注意区分 Java 的按值传递和按引用传递,但使用按引用传递时,被调端不会对(没有能力)对调用端造成任何影响,
  • 按引用传递便具备对调用端造成影响的能力,如果在按引用传递的情况下,还想保证不会对调用端产生任何影响,此时便可以使用 final 关键字(C/C++ 则是 const 关键字)修饰参数;

1. 按值传递

当传递的是一个对象时:

class Test{
    private int i = 0;

    public Test(int i) {
        this.i = i;
    }
    // setI, getI
}

public class PassByValue {
    private static void update(Test t) {
        t = new Test(20);   // t.setI(20); 注意二者的区别
        System.out.println(t.getI());
    }

    public static void main(String[] args) {
        Test t = new Test(10);

        System.out.println(t.getI());      // 10
        update(t);                         // 20
        System.out.println(t.getI());      // 10 仍然是 10 
    }
}

当然也可以直接输出对象:

public class PassByValue {
    private static void update(Test t) {
        t = new Test(20);
        System.out.println(t);
    }

    public static void main(String[] args) {
        Test t = new Test(10);
        System.out.println(t);      // details.Test@15db9742
        update(t);                  // details.Test@6d06d69c
        System.out.println(t);      // details.Test@15db9742
    }
}
posted on 2017-08-24 21:49  未雨愁眸  阅读(179)  评论(0编辑  收藏  举报