Java 中的引用和指针

在一些编程场景中,我们常常需要记录下某一个特殊的实例位置(如BST转双向链表题中需要记录最终生成的链表的头节点)。

在使用Java编程过程中,需要注意引用的问题。

class ListNode {
	public int val;
	public ListNode next;

	public ListNode(int _val) {
		val = _val;
	}
}

public class PointerTestInJava {
	public static void main(String[] args) {
		ListNode node1 = new ListNode(1);
		ListNode node2 = null;
		
		pointerTest(node1, node2);
		if (node2 == null) {
			System.out.println("node2 is still null!");
		} else {
			System.out.println(node2.val);
		}
	}

	public static void pointerTest(ListNode node1, ListNode node2) {
		node2 = node1;
	}
}

打印结果如下:

node2 is still null!

显然pointerTest方法并不能将node1指向node2,作如下的改变:

public class PointerTestInJava {
	public static void main(String[] args) {
		ListNode node1 = new ListNode(1);
		ListNode node2 = new ListNode(2);

		pointerTest(node1, node2);
		if (node2.next == null) {
			System.out.println("node2.left is null!");
		} else {
			System.out.println("node2.next is " + node2.next.val);
		}
	}

	public static void pointerTest(ListNode node1, ListNode node2) {
		node2.next = node1;
	}
}

打印结果:

node2.next is 1

此时,node1.left指向了node2. 原因是可把node1.left看做是一个指针。

原文地址:https://www.cnblogs.com/harrygogo/p/4605818.html