本帖最后由 戴振良 于 2013-1-28 17:17 编辑
看了大家画的图,意思是有了,可我觉得没人画出来可以很容易让大家理解的,因此我在这里再详细的说说Java变量在内存中的分配情况。(注:有些同学理解能力很强,看老毕视频后已经理解的很清楚了,那就没必要看这贴子,因为我这也是看了老毕的视频后自己经过试验的理解) 学Java,必定常会用到赋值,其实如果我们把赋值操作理解清楚了,那么Java变量在内存的分配情况就清楚了。在这里我说说我对赋值的理解,不一定对,大家多多批评指正: 内存赋值、赋值,得有值,赋到哪去啊,很多人知道是赋到变量去,在这里我觉的大家可以试着改变一下不使用别人定义好的名词,这样更容易理解事情的本质,比如说把值赋给了变量x,如把1赋给了x,x是个什么东西呢?它是变量,这个比较抽象不好理解,我们说把一棵巧柯立放进一个盒子里,那么盒子是那个四四方方的东西,我们看的见所以容易理解,盒子只是那东西的名字,变量看不见,说变量不容易理解,既然变量能装”值”,它必定是一种能装值的东西的名字而已,那它是什么东西的名字呢,答:内存的名字。 变量是内存的名字这个大家都知道,只是思考问题的时候就模糊了. 内存地址再来看x = 1,那么这个x变量我们看不到呀,老说把1存到了x里,我觉得这样对于我们理解不太好,应该这样理解,x = 1,是把1这个值存到了变量x所绑定的内存地址里,因为大家都知道,电脑的所有一切数据,要么放在硬盘、U盘、光盘等,要么放在内存里,所以我们说把1放在内存里,这样比较容量理解本质。把1放在内存里,要有个条件——“必须要先知道要存到内存哪个地方”,打个比方,我们说把巧柯立放进盒子里,必须要先知道盒子在哪里吧!有些没怎么学过电脑的人会说内存就一块,地址就是主板那块内存,地址就一个,这是不对的,一块容量为2G的内存条,它就相当于一个海南省,它里面有好多的地方(地址),而一块4G的内存条就好比一个四川省,它的地方(地址)更多了。当然了,2G和4G的内存的容量大小虽然不同,可是他们的物理形状是一样大小的,至于为什么它们里面的容量(地址)的大小不同,这就是高科技的结果了,没必要去深究了。我们不说把1放在变量p中而说把1放在内存中,这样比较容易理解本质。 值 赋值、赋值,再来说说这个值,这值又是些什么东西呢,看过老毕基础视频的都知道,电脑的一切数据都是010101110110这样的二进制数,那么说简单一点,值就是8种基本数据类型的值,如int、float、char等,再简单点说值就两样东西,数字(如1、2、3.5等)和字符(如’a’,’b’,’c’等),再简单点说值就一样东西,二进制数据(如01010101)。 值、内存、内存地址,应该大家都是知道的,好了,到这里已经废话连编了,这里总结一下,我们一说到赋值,分析时就要想到3样东西:值、内存、内存地址,花了这么多废话给大家讲这个大家都知道的东西,我只是想告诉大家这三个非常重要。 到此,我自己总结了一个结论,应该是不对的,大牛们常说“一切都是对象”,那么我来一句“一切都是赋值操作”。有了这个理论我们分析内存就简单了,因为我上面说赋值就3样东西:值、内存、内存地址,因此我们了解好这3样东西就够了 再来一个我自己的总结:所有的变量(包括基本类型变量和对象类型变量)只能保存8种基本类型的值,不能保存对象。 好了,变量不能保存对象,那对象保存到哪去啊???想不到原因的是因为我们学了基础知识却不会拿来用,我上面说了电脑里所有的数据,要么保存在硬盘、U盘、光盘等,要么保存在内存条,所以对象当然是保存在内存中了。这个思想我们要熟记。来看下面的问题: Personp1 = new Person(); Personp2 = p1; PersonP3 = p1; 第一句代码执行后,我们会说p1就是一个Person对象,3句代码都执行完后,有人会说有3个Person对象。 根据我上面总结的理论,我说变量只能保存值,所以p1没有保存对象,所以p1不是Person对象,p1只是一个对象类型的变量,它保存了一个值,但这个值不是Person对象。 说有3个Person对象,我再总结一句:相同的对象,在任何时候都只有一个,而且它在内存的位置不变。
|