package thinkinginjava.exercise.chapter.one;
public class Assignment {
public static void main(String[] args) {
/*对象赋值出现别名*/
Tank t1 = new Tank();
Tank t2 = new Tank();
//t1,t2分别为两个对象的引用到堆当中
t1.f = 20;
t2.f = 30;
System.out.println(t1.f+" "+t2.f);
t1 = t2;
//将t2引用赋值给t1,这时候t1这个引用就被覆盖掉了,t1这个引用就会被Java的垃圾回收器回收了
//t1和t2这两个引用就指向同一个对象,
System.out.println(t1.f+" "+t2.f);
t1.f = 40;
System.out.println(t1.f+" "+t2.f);
t2.f = 50;
System.out.println(t1.f+" "+t2.f);
//在赋值之后,无论是修改t1,还是t2,都是指向同一个对象,所以输出的值,都会是一样
/*基本类型赋值无别名*/
int i1 = 20;
int i2 = 30;
//基本类型不是用new来创建变量,所以不是创建引用,而是直接创建变量到堆栈当中,该变量直接存储有值
i1 = i2;
//基本类型的赋值不存在别名的问题
System.out.println(i1+" "+i2);
i1 = 40;
System.out.println(i1+" "+i2);
/*方法中调用的别名*/
Tank t3 = new Tank();
t3.f = 90;
Assignment.f(t3);
System.out.println(t3.f);//方法的参数中传递对象,如果针对对象进行操作,也会出现别名的问题
}
static void f(Tank t){//这里实则是传递了一个引用到f方法当中
//f方法实际上是更改了f之外对象的值
t.f = 100;
}
}
class Tank{
float f;
}
赋值-读Thinking in java
最新推荐文章于 2024-10-06 20:16:20 发布