62,628
社区成员
发帖
与我相关
我的任务
分享class TestClass {
private int m;
public TestClass(int member) {
m = member;
}
public String toString() {
return "" + m;
}
public void setMember(int member) {
m = member;
}
public int getMember() {
return m;
}
}
public class SwapTest {
static void swap(TestClass x, TestClass y) {
TestClass tmp = new TestClass(x.getMember());
x.setMember(y.getMember());
y.setMember(tmp.getMember());
}
public static void main(String[] args) {
TestClass a = new TestClass(7);
TestClass b = new TestClass(8);
swap(a, b);
System.out.println(a);
System.out.println(b);
}
}如果是按值传递,对 x 和 y 进行操作是不应该影响 a 和 b 的。
class TestClass {
private int m;
public TestClass(int member) {
m = member;
}
public String toString() {
return "" + m;
}
public void setMember(int member) {
m = member;
}
public int getMember() {
return m;
}
}
public class SwapTest {
static void swap(TestClass x, TestClass y) {
TestClass tmp = x;
x = y;
y =tmp;
}
public static void main(String[] args) {
TestClass a = new TestClass(7);
TestClass b = new TestClass(8);
swap(a, b);
System.out.println(a);
System.out.println(b);
}
这个是正确演示值传递的事例。
你写的交换方式,是因为x,a指向同一块地址,当指向内容被更改,那就意味着a指向的内容也被更改。所以大部分人认为java只有值传递,没有引用传递。