引用是在方法内变化的,方法发布后不会生效,但是修改引用的内容会生效publicclassTest{publicstaticvoidmain(String[]args){Personp1=newPerson();p1.name="1";Personp2=newPerson();p2.name="2";交换(p1,p2);System.out.println(p1.name);交换名(p1,p2);System.out.println(p1.name);}publicstaticvoidswap(Personp1,Personp2){Personp=p1;p1=p2;p2=p;System.out.println(p1.name);}publicstaticvoidswapName(Personp1,Personp2){Stringname=p1.name;p1.name=p2.name;p2.name=名称;System.out.println(p1.name);}//输出2122你知道原因吗?在Java应用程序中,当对象引用作为参数传递给方法时,您传递的是引用的副本(按值传递),而不是引用本身。所以在swap方法中,p1和p2进入方法后,不再是方法外原来的p1和p2,而是两个新的。即使两者互换,在方法外也不会改变。但是为什么swapName方法改变了呢?因为实际上p1和p2在方法外仍然指向p1和p2的地址,修改同一个地址的名称必须改变原来p1和p2在外面指向的内容的名称。
