scarecrow
发贴: 7
积分: 0
|
于 2005-12-15 11:04
>>先定义一个名为str的对String类的对象引用变量:String str; 这句话问题不大,就是在栈中分配一个指向String的指针变量str(和定义一个名为str的对String类的对象引用变量语义相同)
>>在栈中查找有没有存放值为"abc"的地址, 栈是存放变量的,并不能存放什么地址。所谓存放地址就是在栈中存放的指针变量用来存放的地址;
>>如果没有,则开辟一个存放字面值为"abc"的地址. 已经有一个str引用变量了,为何还要再开辟一个存放"abc"地址的存储空间?直接把str指向"abc"的地址(和str作为常量字符串的引用是一样的语义) >> 接着创建一个新的String类的对象o 这个对象如何创建?据我所知JAVA中所有的对象实例创建都是在堆中,否则只是创建该对象的引用变量,既然有了str的引用再创建一个又有何用?
>>并将o 的字符串值指向这个地址
字符串值指向地址?听起来很矛盾啊。
>>将str指向对象o的地址。 作者似乎也明白str可以是指向地址。直接指向符合常量"abc"的地址不就ok了。为何非得弄出来个o阿。唯一的解释是"abc"不是String类型不能直接引用"abc",虚拟机内部需要通过 o= new String("abc"); 创建一个String对象的实例然后再通过str引用此实例。
至于我的结论我是根据我对C语言的理解和指针的概念得出来的,我JAVA的对象引用应该何C语言的指针类似. 。我不能确信我的结论是否正确。但是感觉作者对其的解释的很混沌不清。
|