" =的秘密!"-------和学java的初学者共同进步

=的秘密!

你知道=的秘密吗???能说说这个=有什么作用吗???

“嗯???赋值运算符?它不就是把右边的东西赋给左边的意思吗...”

说的有理,给你五十分!

其实你只说对了一半,那只不过是赋值运算符的表面。
大家看下面这幅图:


这幅图中定义了两个整型变量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说:“以后你要跟我一样,控制这个空间,明白了吗?”


好,我现在给大家,留一个题,研究一下,形参个实参的关系,想一想:
“为什么当方法的参数是原始类型数据时,它本身不改变。而当参数是一个对象时,它会改变呢?”
我给大家一个提示,按照下图,思考一下:



[ Last edited by levi on 2004-11-1 at 10:05 ]




Share |
Share

Originally posted by 雪山飞虎 at 2004-11-1 11:04:
实际上还是在用,只不过没有明说而以!

yes.gif




TOP

Originally posted by 雪山飞虎 at 2004-11-1 11:04 AM:
实际上还是在用,只不过没有明说而以!

能否解释一下什么叫指针啊?

TOP

Originally posted by Player at 2004-11-1 01:37 PM:
能否解释一下什么叫指针啊?

POINTER, ZEIGER biggrin.gi
[fly][color=purple] Ich kaufe immer mehr°°°°°°°[/color][/fly]

TOP

Originally posted by twosteps at 2004-11-1 04:23 PM:
POINTER, ZEIGER biggrin.gi

das weiss ich schontired.gif

TOP

Originally posted by Player at 2004-11-1 12:37 PM:
能否解释一下什么叫指针啊?


存变量的地址的   C 啊

TOP

之所以java使用了指针的概念却不明确说明,是因为,在C和C++中使用指针是要自己负责分配和释放内存的,这样对于我们来说就是危险的,有可能造成内存泄漏.而java实际上是虚拟机已经为我们实现了一个垃圾内存管理器,可以自动为我们收集垃圾内存并且负责释放他们,因此java并不提倡指针的说法,以示他和C与C++的区别.
那年清秋 燕落桥边巧相会
脉脉如水 云剪青山翠
低眉莞尔 此生欲与醉
便从此 痴痴长坐 夜夜雨声碎

TOP

Originally posted by 反方向的钟 at 2004-11-1 20:05:
之所以java使用了指针的概念却不明确说明,是因为,在C和C++中使用指针是要自己负责分配和释放内存的,这样对于我们来说就是危险的,有可能造成内存泄漏.而java实际上是虚拟机已经为我们实现了一个垃圾内存管理器,可以 ...

哈哈,老大说话了biggrin.gi




TOP

Originally posted by 乐翻天 at 2004-11-1 05:15 PM:
存变量的地址的   C 啊

const int a;
int* point = &a;
Is it invalid?

TOP