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
}
}