黑马程序员技术交流社区
标题:
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