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看做是一个指针。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号