java编程思想阅读笔记 第三章(赋值操作=)

Java的赋值操作(=)应该分为两种情况:

1. 针对基本数据类型的赋值操作

2. 针对对象的赋值操作

基本数据类型的赋值很简单。基本数据类型存储了实际的数值,而并非是指向对象的引用,所以在为其赋值的时候,是直接讲一个地方的内容复制到了另一个地方。例如对基本数据类型使用a=b,那么b的内容直接复制给a。若接着又修改了a,而b根本不会受影响。

以交换两个数为例:

public class Swap {
	
	public void swap(int a ,int b)
	{
		int temp=a;
		a=b;
		b=temp;
	}
	public static void main(String[] args) {
		int a=5,b=6;
		System.out.println("a="+a+"\tb="+b);
		Swap s=new Swap();
		s.swap(a, b);
	}

}

输出结果为:a=5 b=6
我们可以看到,对基本数据类型的赋值操作并不会影响到原来的值。

但是当为对象赋值时,情况发生了变化。对一个对象进行操作时,我们真正操作的是对象的引用。所以如果将一个对象赋值给另一个对象,实际上是将引用从一个地方复制到另一个地方。这意味着如果对对象使用c=d,那么c和d都指向原本只有d指向的那个对象。举个例子来看:

class Tank
{
	int level;
}
public class Assignment {

	public static void main(String[] args) {
		Tank t1=new Tank();
		Tank t2=new Tank();
		t1.level=1;
		t2.level=2;
		System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
		t1=t2;
		System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
		t1.level=25;
		System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
	}

}
输出结果为:
t1.level:1		t2.level:2
t1.level:2		t2.level:2
t1.level:25		t2.level:25
方法调用的过程中也存在这样的别名问题:
class Letter
{
	char c;
}

public class PassObject {
	
	static void f(Letter f)
	{
		f.c='z';
	}

	public static void main(String[] args) {
		
		Letter x=new Letter();
		x.c='a';
		System.out.println("x.c:"+x.c);
		f(x);
		System.out.println("x.c:"+x.c);
	}

}
输出结果为:
x.c:a
x.c:z
我们可以看到,实际上函数传递了一个引用,所以f()实际上改变的是该函数之外的对象。

 
 





       
       






       
       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值