A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

看了一个道面试题上面说 String str = newString("abc");产生了两个新对象,我觉得是3个对象呢?
因为abc 是一个对像 new出来一个对象  然后栈内容也有个对象str对abc的引用

3 个回复

倒序浏览
两个对象是对的,这个就不再说了。

第一个是"abc", 它存贮在字符串常量缓冲区中 也叫data segment 中
如果存在连个 引用    String s1 ="abc" ,String s2 ="abc" 在内存中实际上是都指向同一个字符串常量。

第二个是 new出来的这个对象 存储在堆空间中。

想要学的透彻必须要详细的知道代码是存贮在哪块内才当中,在找工作笔试的时候体现出很大的作用。
回复 使用道具 举报
江南 发表于 2012-6-10 00:35
两个对象是对的,这个就不再说了。

第一个是"abc", 它存贮在字符串常量缓冲区中 也叫data segment 中

谢谢。 更加明白了
回复 使用道具 举报
本帖最后由 王月 于 2012-6-10 02:02 编辑

lz是吧对象的引用和对象混淆了,常量池中肯定有一个对象就不说了。

new出来的对象是在堆内存中,在栈内存中开辟了空间来存储指向abc的变量str,str是对象的引用,而不是对象。
所以说String str = new String("abc");这里有两个对象,是这么来的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马