共计 671 个字符,预计需要花费 2 分钟才能阅读完成。
援用在办法内扭转,出了办法之后不失效,然而如果批改援用的内容,则失效
public class Test {public static void main(String[] args) {Person p1 = new Person();
p1.name = "1";
Person p2 = new Person();
p2.name = "2";
swap(p1,p2);
System.out.println(p1.name);
swapName(p1,p2);
System.out.println(p1.name);
}
public static void swap(Person p1,Person p2){
Person p = p1;
p1 = p2;
p2 = p;
System.out.println(p1.name);
}
public static void swapName(Person p1,Person p2){
String name = p1.name;
p1.name = p2.name;
p2.name = name;
System.out.println(p1.name);
}
}
// 输入
2
1
2
2
晓得起因么?
在 Java 应用程序中,当对象援用是传递给办法的一个参数时,您传递的是该援用的一个正本(按值传递),而不是援用自身。
因而 swap 办法,的 p1 和 p2 进入办法后,曾经不是办法里面的原始 p1 和 p2,而是两个新的,即便两个调换了,也不会在办法外扭转。
然而 swapName 办法为什么变了呢?因为实际上 p1 和 p2 还是指向了办法里面的 p1 和 p2 的地址,批改同样地址的的 name,必定在里面原始的 p1 和 p2 指向的内容的 name 都变了。
正文完