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()之外的对象。”

    简单的解释为:

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

  • 相关阅读:
    HDU1260DP
    HDU1114 背包
    HDU1078记忆化搜索
    HDU1024 最大m子段和
    Codeforces Round #401 (Div. 2) A,B,C,D,E
    HDU3666 差分约束
    HDU1540 区间合并
    HDU3308 线段树(区间合并)
    Codeforces Round #403 (Div. 2) B 三分 C dfs
    HDU1573 线性同余方程(解的个数)
  • 原文地址:https://www.cnblogs.com/save-shengfei/p/6364214.html
Copyright © 2011-2022 走看看