Java 中总是值传递。
但是当传递的是对象的时候,如果你没有将形参指向新的对象,直接使用形参改变对象的值。这种改变在外部是能被感知的。
但是对于一般情况。change int 是值传递。change string ,因为都指向了新的地址。所以原值不会被改变
Demo 如下:
public class PassTest {
private static void change(A a) {
a.age = 20;
a = new A();// 将对引用 a 指向了一个新的地址
a.age = 30;
System.out.println("Inside function age = " + a.age);
}
private static void change(int b) {
b++;// 原子类型,因为是值传递,所以当前域中的b值被改变了。
System.out.println("Inside function b = " + b);
}
private static void change(String c) {
c = "";// 相当于 c=new String("") c指向了新的地址
System.out.println("Inside function c = " + c);
}
public static void main(String[] args) {
A a = new A();
a.age = 10;
change(a);// 将对象 a 的地址传给了 change
System.out.println("Inside main age = " + a.age);
int b = 100;
change(b);
System.out.println("Inside main b = " + b);
String c = "str";
change(c);
System.out.println("Inside main c = " + c);
}
}
class A {
public int age = 0;
}