將句柄傳遞進(jìn)入一個(gè)方法時(shí),指向的仍然是相同的對象。
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 方法會(huì)在打印語句里自動(dòng)調(diào)用,而PassHandles 直接從Object 繼承,沒有toString 的重新定義。
因此,這里會(huì)采用toString 的Object 版本,打印出對象的類,接著是那個(gè)對象所在的位置(不是句柄,而
是對象的實(shí)際存儲(chǔ)位置)。輸出結(jié)果如下:
p inside main(): PassHandles@1653748
h inside f() : PassHandles@1653748
可以看到,無論p 還是h 引用的都是同一個(gè)對象。這比復(fù)制一個(gè)新的PassHandles 對象有效多了,使我們能
將一個(gè)參數(shù)發(fā)給一個(gè)方法。但這樣做也帶來了另一個(gè)重要的問題:別名問題