什么是java的别名机制?
public class Learn{
int i;
public static void main(String[] arg){
Learn a = new Learn();
Learn b = new Learn();
a.i = 10;
b.i = 20;
System.out.println(a.i); //10
System.out.println(b.i); //10
a = b;
System.out.println(a.i); //20
System.out.println(b.i); //20
a.i = 50;
System.out.println(a.i); //50
System.out.println(b.i); //50
}
}
//执行代码 a = b 后,为什么a.i = b.i? 为什么修改a.i 时b.i也同时改变?
在使用new关键字时,系统会将对象创建并在堆中为其分配一个内存区域,eg:Learn a = new Learn(),此处的a并不是对象,而是对象的引用,对象的引用实际上就是对象的物理地址,系统通过该物理地址查找指定的对象。当将b的引用赋值给a时,此时通过a找到的是b的对象。所以执行a.i = 50实际上就是修改a和b共同指向的对象的 i 变量。
在方法中,java的别名机制是怎么体现的?
class T{
int i ;
}
class R{
private void f(T t){
t.i = 10;
}
public static void main(String[] arg){
T e = new T();
e.i = 20;
System.out.println(e.i); //20
f(e);
System.out.println(e.i); //10
}
}
原文:https://www.cnblogs.com/wpf-admin/p/11546255.html