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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨志罡 黑马帝   /  2011-7-21 16:47  /  2882 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了一个道面试题上面说 String str = newString("abc");产生了两个新对象,小沈阳说“这是为什么呢?”
[ 本帖最后由 杨志罡 于 2011-07-21  16:48 编辑 ]

4 个回复

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

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

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

想要学的透彻必须要详细的知道代码是存贮在哪块内才当中,在找工作笔试的时候体现出很大的作用。
回复 使用道具 举报
有两个对象
1.abc 是一个对象
2.new String("abc") 是一个对象,他的引用是str
回复 使用道具 举报
黑马网友  发表于 2011-7-21 16:56:59
藤椅
豁然开朗  貌似一些材料上在解释这个问题时候把 堆和栈 都整出来了,还说道在栈中存在字符串池,有字符串怎么样,没字符串怎么样的很复杂很麻烦的,有待于参加黑马程序员,请教老师详细讲解
回复 使用道具 举报
黑马网友  发表于 2011-7-21 16:52:50
沙发
语句“String str = newString("abc");”
第一对象:在String构造方法里的常量“abc”  。
第二个对象:str 。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马