a = b执行后,a和b指向同一个对象,a原来所指向的对象并没有被立即删除,只有当垃圾回收器运行时,并且没有其他引用关联至该对象时才会被回收!
java中没有析构函数,也不用关心资源回收问题。
java中没有析构函数,也不用关心资源回收问题。
解决方案 »
- java io包中的reader类和writer类的应用
- 网站与应用软件数据库同步更新问题
- 如何做到按“ESC”键就关闭面板
- 哪位帮传一个JAVA与SQL2000的驱动程序,小弟笨了点没有找到
- 一起探讨java的开发群
- 在FileChooser中如何只显示目录?而且我点确定后就完成,而不是又进入目录中
- 怎么样java实现类似js中的eval 阿
- 直接使用jdk编译时同一包中的类之间的调用为什么会有“cannot resolve symbol”错?
- 有什么办法可以判断数据库中某张表是否存在
- 求教weblogic高手一个简单的问题.急!!!
- 内部类继承问题
- anybody,知道如何把一个WAR文件直接打包成EAR吗
-------
不会吧!我的怎么有?呵呵,难道我们的1.5不一样?
这个方法是用来象C 里面的打印方法一样可以格式化输出,并不是打印对象的内存地址。
目前我不知道怎么打印一个对象的内存地址。其实我的疑问是:在 a = b 时,a对象的地址是不是就变成 b对象的地址了呢?
-------
其实a和b都是对同一个对象的引用,即指向同一个内存地址。当赋值时,a=b,a就获得了b指向的对象的引用。而它们共同指向的对象就是new的时候生成的/
Test1 a = new Test1();
Test1 b = new Test1();的时候,它们就指向了同一地址吗?to 孤独萤火虫,如果去掉 a = b; 打印它们,结果是:
Test1@757aef Test1@d9f9c3
也就是说a的地址是 757aef,而b的地址是 d9f9c3,是这样吗?
Test1 a = new Test1();
Test1 b = new Test1();的时候,它们就指向了同一地址吗?
-----------
不,这里显然是定义了两个对象,a,b分别指向它们
当a=b的时候,a指向了b之前指向的对象hashCode()不是获得对象内存地址的,如果是看过jdk源代码的就知道了,这个值是用一个普通的hash算法算出一个值
我不相信真的没有,是不是太简单了,不值得拿出来呢?
因为我是从c转过来学习的,所以对这个比较关心。见笑了。
在java里面栈区,堆区,全局区的概念很模糊,因为首先没有全局变量的说法,所以就不用说全局区了。而大部分的内存分配都是使用栈内存
哦?我一直以为就是对象的内存地址,给详细解释一下看看。
用来传递参数。比如:
int a;
int *p1 = a;
int &p2 = a;
那么p2 就相当于 const p1。不知,我理解的可对?
比如Test1 a=new Test1();
此时new Test1();创建在堆里面,相当于一个常量,a引用了它的地址
但是如果有a=b,则a引用的对象就变了,就是原来b引用的对象了。
那么变量a 实质上就是个指针,当 a=b 时,如果改变a ,则变量b跟着改变。还有补充吗?
你认为呢?
System.identifyHashCode(Object a);
这里对象a并不用RTTI进行解析的!
但对两个引用执行a = b操作时,内存中两个对象的地址没有任何变化只是引用a指向了引用b指向的对象
不是
System.identifyHashCode(Object a);可是这个能输出什么?什么都没有输出啊 你确信是打印地址的方法?
在IdentityHashMap里面就是这样获得hashCode
你可以这样输出:System.out.println(System.identifyHashCode(a))