將句柄傳遞進入一個方法時,指向的仍然是相同的對象。
public class PassHandles {
static void f(PassHandles h) {
System.out.println("h inside f(): " + h);
}
public static void main(String[] args) {
PassHandles
p = new PassHandles();
System.out.println("p inside main(): " + p);
f(p);
}
}
toString 方法會在打印語句里自動調用,而PassHandles 直接從Object 繼承,沒有toString 的重新定義。
因此,這里會采用toString 的Object 版本,打印出對象的類,接著是那個對象所在的位置(不是句柄,而
是對象的實際存儲位置)。輸出結果如下:
p inside main(): PassHandles@1653748
h inside f() : PassHandles@1653748
可以看到,無論p 還是h 引用的都是同一個對象。這比復制一個新的PassHandles 對象有效多了,使我們能
將一個參數發給一個方法。但這樣做也帶來了另一個重要的問題:別名問題