码迷,mamicode.com
首页 > 其他好文 > 详细

方法调用中的别名问题

时间:2017-02-04 12:29:51      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:别名   遥控器   nbsp   imp   电视机   也会   port   java编程思想   log   

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

简单的解释为:

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

方法调用中的别名问题

标签:别名   遥控器   nbsp   imp   电视机   也会   port   java编程思想   log   

原文地址:http://www.cnblogs.com/save-shengfei/p/6364214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!