关于java: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,而是两个新的,即便两个调换了,也不会在办法外扭转。

然而swapName办法为什么变了呢?因为实际上p1和p2还是指向了办法里面的p1和p2的地址,批改同样地址的的name,必定在里面原始的p1和p2指向的内容的name都变了。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理