黑马程序员技术交流社区

标题: String str = newString("abc");产生了两个新对象,这是为什么呢 [打印本页]

作者: 张文兵    时间: 2012-6-10 00:33
标题: String str = newString("abc");产生了两个新对象,这是为什么呢
看了一个道面试题上面说 String str = newString("abc");产生了两个新对象,我觉得是3个对象呢?
因为abc 是一个对像 new出来一个对象  然后栈内容也有个对象str对abc的引用

作者: 江南    时间: 2012-6-10 00:35
两个对象是对的,这个就不再说了。

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

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

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

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

谢谢。 更加明白了
作者: 王月    时间: 2012-6-10 02:01
本帖最后由 王月 于 2012-6-10 02:02 编辑

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

new出来的对象是在堆内存中,在栈内存中开辟了空间来存储指向abc的变量str,str是对象的引用,而不是对象。
所以说String str = new String("abc");这里有两个对象,是这么来的。





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