Java赋值操作符

前言

java基础这系列文章主要是学习《java编程思想》第四版时的读书笔记。方便以后自己查阅,没办法,习惯读书做笔记了!

JAVA赋值操作符=

这篇博文想写的是java操作符中的赋值操作符“=”。

        赋值操作符它的意思是“取右边的值(即右值),把它复制给左边(即左值)”右值可以是任何常数,变量或者表达式(反正能生成一个值就行)。但是左值必须是一个明确,已知的变量名。也就是说左值是用来存储右值的一个地方,需是一个存储空间。因此,就不能出现常数出现在左边的情况,如:4=TingTing(这个名字有特殊意义,今后经常出现,哈哈哈)。基本数据类型(byte,char,short,int,long,float,double,boolean)的赋值很简单,赋值的时候就是把一个地方的内容复制到另外一个地方。比如对基本数据类型赋值操作tingting1 = tingting2,此时tingting1 与tingting2就有了相同的值,但是它们还是相互独立的,任意修改其中一个值都不会影响到另一个。给对象赋值的时候就是另一种情况了。再讲对象赋值前,我们需要复习下对象操作,创建的基础知识。例如我们创建一个对象时是这样的语句:String t1 = new String("tingting");
new String("tingting")的时候给我们创建了一个字符串对象并存储字符串“tingting”。这个对象我们是如何操作的呢?是通过名字t1来操作的,所以我们要纠正一点就是t1不是个对象,只是个对象的引用。怎么理解这句话,很简单,对像的引用就像人名一样,同一个人名谁都可以用,但是具体的对象确实唯一的。Java里创建的对象是存储在堆(一种通用的内存池,反正理解成存储对象的区域就行,在RAM里)里,而对象的引用存储在堆栈(也在RAM)中。为什么呢,这可以联想到我们的字典,通过字典目录我们可以定位到我们要找的字,然后翻到相应的目录。因此对象的引用存储在堆栈里头,查询比较快,区域也小(字典目录也就是10多页),对象呢存储在堆里头,包含对象的具体信息。说完这部分基础知识,使用字典的例子,我们对象赋值理解起来就很容易了。话不多说,上代码

 * java 赋值操作符
 * @author Administrator
 *
 */
public class Assignment {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Word  pig = new Word(38);
		Word cat = new Word(58);
         System.out.println("1-->>pig page:"+pig.getPage()+",cat page:"+cat.getPage());
         pig = cat;
         System.out.println("2-->>pig page:"+pig.getPage()+",cat page:"+cat.getPage());
         cat.setPage(50);
         System.out.println("3-->>pig page:"+pig.getPage()+",cat page:"+cat.getPage());
	}

}
/**
 * 字典里的字
 */
class Word{
	
	private int page ;//字所在页码

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public Word(int page){
    	this.page=page;
    	}
	
	}

代码片段里,我们创建了两个Word对象引用cat,pig(即在字典里添加两个索引),分别指向字典里的58页和38页。因此在第一个输出语句中输出的是:1-->>pig page:38,cat page:58。某天,家里的熊孩子拿到这个字典,它把字典目录里pig指向的索引,修改跟cat指向一样,然后输出结果就是

2-->>pig page:58,cat page:58。pig与cat指向引用一样了,那么pig原来指向的页码就再也无法通过目录中pig查找了,对应于我们的java对象就是,赋值的时候,被覆盖的引用所指向的对象如果只有这个唯一引用,那么,它就不会再被引用,被“垃圾回收器”自动清理了。熊孩子他继续涂涂改改目录,本来pig与cat都指向58页了,然后调皮的改成指向50页,那么输出结果便是:3-->>pig page:50,cat page:50。我们只修改了cat引用的对象,但是pig的输出结果也变了,说明它们指向确实是同一个对象,就像梅球王,煤老板,梅西都指向一个人一样。

结束语

虽然经常使用赋值操作符=对对象进行赋值操作,但是没有深入了解对象赋值背后的知识,也一直混淆对象引用和对象的概念,看来基础知识还是需要进一步牢固!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值