来看一段代码
public class Man {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Man{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Man(String name, Integer age) {
this.name = name;
this.age = age;
}
public static void swap(Man x, Man y) {
Man temp = y;
y = x;
x = temp;
}
}
public class Main {
public static void main(String[] args) {
Man a = new Man("a", 65);
Man b = new Man("b", 66);
Man.staticswap(a, b);
System.out.println(a + "\n" + b);
}
}
运行结果是
对象 a b 的 引用并没有发生改变
下面就说说 java的参数传递机制
先说结论:java参数传递并不是引用传递,而是值传递
看下图
swap方法中,a b 向 x y 传递的是值,是 a b 在栈中的值,此处的 传递=拷贝
也就是说,a b 与 x y 除了类型一致外、值相等(指向了堆的同一地址),没有任何相同处
a b与x y完完全全不相干
都不相干了,x y 不管这么改变自身的值 ,与 a b 有什么关系呢
所以, 方法退出,a b 的引用并没有发生变化
再看下一个
改写swap方法,
public static void swap(Man m) {
m = new Man("xx",88);
}
调用运行
传递的是值
传递的是值
传递的是值