通过学习链表如何添加,删除元素等操作,对java引用类型有了深入理解

    如果创建一个自定义的 Person类 如下:

class Person{
    public String name;
    public int age;
    Person(String name,int age)
    {
        this.name = name;
        this.age = age;
    }
}

    然后再main方法中:

class test{
    public static void main(String[] args)
    {
        Person Alex = new Person("Alex",25);
        Person refer = Alex;
        refer.name = "KKKKKK";
        refer.age = 99999;
        System.out.println(Alex.name);
        System.out.println(Alex.age);
    }
}

    从main方法中可以看出,我创建了一个引用类型Person类型的变量Alex指向new Person(“Alex”,25),    接着创建了 Person类型的变量 refer,令refer与Alex指向同样的实例。

    然后,我改变了refer.name 和refer.age ,  在打印出Alex.name和Alex.age 后,我发现Alex.name和Alex.age的值分别和 refer.name,refer.age一致。

    如果对java中的引用类型不了解的话,可能会感觉很奇怪。为什么明明只改变了refer.name 和refer.age,为什么Alex.name和Alex.age 也同样发生了改变?

    其实java的引用类型类似于C语言中的指针,Person Alex = new Person(“Alex”,25);的意思是令引用类型变量Alex 指向 实例(也可以称作对象)new Person(“Alex”,25), Person refer = Alex; 的意思是令同类型引用类型变量refer 指向 Alex所指的实例, 也就是说此后refer 和Alex 指向了相同的实例。接着我改变了refer.name和refer.age,这就是对refer所指向的那个实例内部的属性进行了修改。由于Alex 也指向这个实例,故发现Alex.name和Alex.age 也同样变成了”KKKKKK” 和 99999 。

    所以我们处理java中的引用类型变量时,要多加小心。如果两个引用类型变量refer1,refer2指向了同一个实例的时候,如果通过refer1.属性名对实例进行内部属性修改,那么refer2.属性名也产生了改变。

同理,java中的方法传参也是这样。 比如 对于方法void function(Person p),我传参数为

function(Alex)  ,那么,这就相当于 Person p = Alex, 与上文main方法中的

Person refer = Alex 完全一致。 如果在function方法中,令p.age = 160,那么,main方法中的

Alex.age 也会同样发生改变。

《通过学习链表如何添加,删除元素等操作,对java引用类型有了深入理解》

《通过学习链表如何添加,删除元素等操作,对java引用类型有了深入理解》

如果要让上图中的链表的 P 转而指向R的话,就要输入

head.next = R;

如果输入 Node temp = Q;  (Q是一个实例)

temp.next = null;

就可以让Q从这个链表上脱离,从而达到删除结点Q的效果。

点赞