this=this.next?

问题背景:一天,在刷链表算法题(力扣707)时想将当前对象引用指向下一个结点,脑子一抽写了这么一行代码:this=this.next;

越看越别扭,我就想:如果一个结点对象调用了一个方法,在该方法中执行了this=this.next,从该方法中出来会怎么样?这个对象变量引用的对象会是下一个结点?

带着这个问题,我去Idea中测试了一下,有如下测试代码:

public class ListNode {
    ListNode next;
    int val;
    public ListNode(){

    }
    public ListNode(ListNode next){
        this.next=next;
    }
    public ListNode(ListNode next,int val){
        this.next=next;
        this.val=val;
    }
    public void change(){
        this=this.next;
    }

}

 

public class Test {
    public static void main(String[] args) {
        ListNode node2 = new ListNode(null, 2);
        ListNode node1=new ListNode(node2,1);//手动造一个两个结点的链表 1 -> 2
        node1.change();
        System.out.printf("node1.val="+node1.val);//结果是1还是2?
    }
}

 真相其实是this=this.next会报错............

解释:

在Java中,this 是一个特殊的关键字,代表当前对象的引用,它是不可修改的。因此,你不能改变它的引用

 

你可能感兴趣的:(java,数据结构)