从java的虚拟机说对象的相同

最近一直在看云计算方面的资料,裸辞之后实在是很迷茫,不知道现在的公司需要什么样的人才。我不是一个很会表现自己的人,所以干脆先沉下心来搞搞学习,顺便准备2014的研究生,每天就更新一两篇博客,来记录偶尔有的感受和对之前知识的认识。
之前有个哥们回复到底什么样的对象才是相同的。
如果是学习过C语言的同志们,应该能够很清楚地回答这个问题。那就是这个对象在内存上的物理地址是相同的,并且他们的类型也是相同的,从细节上说他们就是同一个对象。唯一不同的部分是他们的引用(或者从我的习惯,我会叫他句柄)。
最粗糙的说,java的内存区可以分为“堆”和“栈”,那么就按照这种最简单的方法来区分来讨论上面的问题。
[b]java堆(java heap)是内存中最大的一块,用于存放对象实例。[/b]
[b]java栈存放对象引用,以及编译期可见的各种基本数据类型。[/b]
[i](还有其他的内存区域,这里只考虑对象访问需要操作的区域。)[/i]
对象相同,就是说我们在java堆上的对象实例是相同的。但是对象引用不一定相同。
可能有些同学不清楚什么叫对象的引用,什么叫对象。我画一个图举个例子来表示一下:
例子就用
String str=new String("123");//两个对象
String str1=str;//指向引用对象
[img]http://dl.iteye.com/upload/attachment/0076/8385/03889e6c-f6dd-38fe-9573-5da6855d3c3a.jpg[/img]
在这里这两对象就是相同的。
String str就创建了一个引用对象, 后面的new String()创建了一个对象,"123"也是一个对象,这里发生这样的问题和String是final是相关的。
在第二句,String str1创建了一个引用对象,然后把str引用的地址(或者是句柄地址,在sun的虚拟机上传递的是地址)传递给了str1.因此str1和str指向同一个对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值