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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵磊 黑马帝   /  2011-7-27 21:28  /  2307 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String str=new String("abc")
这个语句到底创建了几个String object?它们直接有什么区别呢?

评分

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

查看全部评分

2 个回复

倒序浏览
首先说明String是不可变类。一次创建将不能再修改,由于String是非可变的,所以每次对string的改变都要重新建立String对象,为了string对象的可利用性和jvm运行的高效。如果是s="abc",将直接在strings pool中进行查找是否存在相等的String,如果存在则直接利用,就不在创建。如果不存在则直接在strings pool中创建对象。如果用new创建对象,则和其他对象的创建一样在heap中创建。
对于此问题来说,则创建了两个string,第一个“abc”创建一个String在strings pool中,第二个是new 出来的String,将和其他对象new出来的对象一样创建在堆中。  str则指向堆中的对象。
[ 本帖最后由 孙朋帅 于 2011-07-27  21:42 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1 恭喜超分了

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 22:21:39
藤椅
楼上正解,确实是一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马