概述
还是《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()之外的对象。”
简单的解释为:
可以把引用想像成遥控器,对象想像成电视机。把引用传递给一个方法,相当于你把电视机的遥控器复制了一个一模一样的给另一个人,这时,你们两个中的任何一个人操作遥控器,控制的都是同一台电视机。
转载于:https://www.cnblogs.com/save-shengfei/p/6364214.html
最后
以上就是安静电灯胆为你收集整理的方法调用中的别名问题的全部内容,希望文章能够帮你解决方法调用中的别名问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复