将一个对象传递到方法内部时,也会产生别名现象。
//: PassObject.java
// Passing objects to methods can be a bit tricky
62
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';
System.out.println("1: x.c: " + x.c);
f(x);
System.out.println("2: x.c: " + x.c);
}
} ///:~
在许多程序设计语言中,f()方法表面上似乎要在方法的作用域内制作自己的自变量Letter y 的一个副本。
但同样地,实际传递的是一个句柄。所以下面这个程序行:
y.c = 'z';
实际改变的是f()之外的对象。输出结果如下:
1: x.c: a
2: x.c: z
别名和它的对策是非常复杂的一个问题。
相关文章
- js中的4种函数调用模式:函数调用、方法调用、构造器调用、间接调用
- Java中Object类的equals()和hashCode()方法深入解析
- 重写Object类中的Equals方法(Java)
- Java中类与方法的学习笔记(一):
- 【Java学习笔记】Java中关于tostring方法的误操作
- 【JAVA】java中实现map集合的数据存取详解三种方法。Android程序员也是要会写的
- Java基础知识点(带返回值方法的定义和调用及方法的重载)
- 黑马程序员——JAVA高新技术---反射--概述,类中构造方法、字段、方法和数组的反射,框架原理,JavaBean简述
- java中带抽象方法的枚举
- java中的实现接口和含有抽象方法的枚举类