这幅图中定义了两个整型变量a和b。
并且,这两个变量各自占用一定的内存空间。
现在用a=b把b的一个副本传递给了a。
从而让 a 和 b 的值都等于5。
并且,它们两个是独立存在的,互不干涉,尽管以后a得到了别的值,可是对b来说是没有影响的。
这是两个原始数据类型变量之间,赋值运算符在内存中的实现。
它是通过把右边的副本传给左边的形式工作的。
那么在两个对象之间,赋值语句是如何工作的呢?
我们首先建立一个对象 a 。如下图:
在图中,我们只是声明了一个对象,到此时,还没有给它分配实际的空间。
我们可以想象,它只是一个方向,并没有实际的值,只是一个要往哪一边走的方向。
在这里,它告诉我们,它要往SuperClass那个方向前进。
通过这个方向,我们就能知道,要给 a 分配哪一类型的对象。
再看一下下面这幅图:
这幅通过a=new SuperClass();这一语句,将一个实际的空间分配给了a。而这里的 a 只不过是一个方向。
再看一个下面这幅图:
图中声明了两个对象 a 和 b 。
它们两个各指向各自的对象。
好,现在我们再加一句a=b;如下图:
此时,我们可以看到,a=b,就如在原始类型数据一样,也是把b的副本传给了a,然而,这回传的,不是它所指的那个空间,而是一个方向,把a 的方向给改变了,让它指向b所指的那个空间。 b说:“以后你要跟我一样,控制这个空间,明白了吗?”
Originally posted by 反方向的钟 at 2004-11-1 20:05:
之所以java使用了指针的概念却不明确说明,是因为,在C和C++中使用指针是要自己负责分配和释放内存的,这样对于我们来说就是危险的,有可能造成内存泄漏.而java实际上是虚拟机已经为我们实现了一个垃圾内存管理器,可以 ...