来看一段代码
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); }
调用运行
传递的是值
传递的是值
传递的是值