赋值-读Thinking in java

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值