a = b执行后,a和b指向同一个对象,a原来所指向的对象并没有被立即删除,只有当垃圾回收器运行时,并且没有其他引用关联至该对象时才会被回收!
java中没有析构函数,也不用关心资源回收问题。
java中没有析构函数,也不用关心资源回收问题。
解决方案 »
- JAVA初级程序员
- 大二初学java,求各位前辈指点迷津
- xml文件报格式错误,各位大侠帮忙看看。
- 无法读取Resultset结果!!!!!!奇怪 求大侠
- Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ ) 是什么原因呢
- 关于JMEnuItem
- 请教如何把一个中文字符传的标点和空格去掉!
- 如何实现server监听多个客户机的连接请求
- 为什么使用clone()的类要implements Cloneable?
- 为什么东方快车不能翻译JBuilder 5 Enterprise,E文不好的朋友是怎么做的?
- 内部类继承问题
- 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))