JAVA引用方法内改变-常见面试题
引用在方法内改变,出了方法之后不生效,但是如果修改引用的内容,则生效
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,而是两个新的,即使两个互换了,也不会在方法外改变。
【JAVA引用方法内改变-常见面试题】但是swapName方法为什么变了呢?因为实际上p1和p2还是指向了方法外面的p1和p2的地址,修改同样地址的的name,肯定在外面原始的p1和p2指向的内容的name都变了。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 对抗抑郁最好的方法
- 事件代理
- 怎样用黑谜速冻膜去黑头,|怎样用黑谜速冻膜去黑头, 最有效的去黑头的方法看这!
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 解决SpringBoot引用别的模块无法注入的问题
- java中如何实现重建二叉树
- 移动端h5调试方法
- 唱歌教学(导致嗓音损坏的几个常见的错误唱歌方法!)
- 拆书方法训练营