仍是《Java編程思想》上的一個問題:
「將一個對象傳遞給方法時,也會產生別名問題:」如下是示例:java
import static net.mindview.util.Print.*; class Letter { char c; } public class PassObject { static void f(Letter y) { y.c = 'z'; } public static void main(String[] args) { Letter x = new Letter(); x.c = 'a'; print("1: x.c " + x.c); f(x); print("2: x.c " + x.c); } }
其輸出結果爲:編程
1: x.c = a
2: x.c = z
而後做者又說
「在許多編程語言中,方法f()彷佛要在它的做用域內複製其參數Letter y的一個副本;但實際上只是傳遞了一個引用。因此代碼行
y.c = 'z';
實際改變的是f()以外的對象。」
對這段話不是太理解:
一、「但實際上只是傳遞了一個引用」是說f(x)中的x是指向f()方法的一個引用嗎?
二、「因此代碼行
y.c = 'z';
實際改變的是f()以外的對象。」編程語言
簡單的解釋爲:code
能夠把引用想像成遙控器,對象想像成電視機。把引用傳遞給一個方法,至關於你把電視機的遙控器複製了一個如出一轍的給另外一我的,這時,大家兩個中的任何一我的操做遙控器,控制的都是同一臺電視機。對象