zoukankan      html  css  js  c++  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()之外的对象。”
        对这段话不是太理解:
        1、“但实际上只是传递了一个引用”是说f(x)中的x是指向f()方法的一个引用吗?
        2、“所以代码行
             y.c = 'z';
             实际改变的是f()之外的对象。”

    简单的解释为:

    可以把引用想像成遥控器,对象想像成电视机。把引用传递给一个方法,相当于你把电视机的遥控器复制了一个一模一样的给另一个人,这时,你们两个中的任何一个人操作遥控器,控制的都是同一台电视机。

  • 相关阅读:
    CF1172F
    CF506E
    【清华集训2014】玛里苟斯
    CF516E Drazil and His Happy Friends
    [NOI2017]游戏(2-SAT)
    [bzoj2878][Noi2012]迷失游乐园(基环树dp)
    bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版
    [bzoj1791][ioi2008]Island 岛屿(基环树、树的直径)
    [AT2306]Rearranging(拓扑序)
    [bzoj5301][Cqoi2018]异或序列
  • 原文地址:https://www.cnblogs.com/save-shengfei/p/6364214.html
Copyright © 2011-2022 走看看