方法調用中的別名問題

仍是《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

能夠把引用想像成遙控器,對象想像成電視機。把引用傳遞給一個方法,至關於你把電視機的遙控器複製了一個如出一轍的給另外一我的,這時,大家兩個中的任何一我的操做遙控器,控制的都是同一臺電視機。對象

相關文章
相關標籤/搜索