黑马程序员技术交流社区

标题: 内存分析时一点不明白的地方 [打印本页]

作者: 黄达标    时间: 2011-12-11 18:07
标题: 内存分析时一点不明白的地方
本帖最后由 达达。 于 2011-12-11 23:00 编辑


作者: 周胜    时间: 2011-12-11 18:38
0x0012是一段地址。。Car c1 = c;是将c这个对象的引用的地址给c1。有了这个地址c1和c就指向堆里的同一个对象了。。
作者: 杨玉揆    时间: 2011-12-11 18:42
其实你上面都写的很清楚了 c1存放的只是一个16进制的地址值,而不是放一段代码。
作者: 吴上储    时间: 2011-12-11 18:58
Car c = new Car(); 创建了一个新对象   Car 将0x0012这段代码赋给c
Car c1 =c; 你要是看不懂 可以 这么看
Car c1;  现在 c1是一个空的 Car类型 对象
    c1 = c;  c是有内容的Car类型 对象   两个类型一个  c的内容可以 给c
作者: 黄达标    时间: 2011-12-11 20:54
汗。。把它当成基本数据类型的赋值方式来看了,引用数据类型的赋值就是赋值地址。谢谢你们的回答!
作者: 武超    时间: 2011-12-11 20:55
首先你要明白,Car c = new Car ();是创建一个引用指向新建对象的地址,也就是c指向0x0012。
其次,你要知道‘=’是将c的地址赋值给了新创建的c1,现在c1指向的就是c所指向的地址0x0012。

还有0x0012这个不是代码 而是16进制的内存地址。其实就和int a=3; int b=a;一样,不同的是你不能直接指定地址而已。你能说3是代码吗?我不认为它是代码,我只认为它是一个数值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2