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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s = new String("xyz");创建了几个String Object?哪几个?

点评

建议下次先在论坛找一下是否有这个问题再提问  发表于 2013-1-31 00:06

6 个回复

倒序浏览
一共是2个
一个是 new这个在堆内存里面
一个是xyz 这个东西是在常量池的
回复 使用道具 举报
new String(“xyz”)的时候首先查看常量池中是否有字符串''xyz"若没有的话就现在常量池中创建"abc",接着在堆内存中创建一个对象,注意这个对象和常量池中的"xyz"是没有关系的,因此此时有两个对象。
如果在一开始检测常量池中已有对象"xyz",则不在创建,只在堆内存创建对象,也就是说下面要是还有一句
String s1 = new String("xyz")的话,只有一个对象。
回复 使用道具 举报
楼主高人啊是
回复 使用道具 举报
总共创建了两个对象
new String("xyz");是在字符串常量池中创建了一个xyz的对象
String s = new String("xyz");是创建了一个s对象,把s对象指向了堆内存中,在堆内存中开辟一块空间,指向常量池中xyz数据。
所以所是创建了两个对象,一个是xyz,一个是s


回复 使用道具 举报
String s = new String("xyz");
先要明白字符串存在常量池中,即存在方法区里;方法区里包含的都是在整个程序中永远唯一的元素;
这就很好理解了若常量池已经有"xyz"对象,就不创建,没有就创建"xyz"对象.
但是肯定有一个new String("xyz")对象存在堆内存里面,并且s指向这个对象,这根new 别的类一样,对象都存在堆内存中
回复 使用道具 举报
代码意思等于。String s =new String();String s=“xyz”;这样总能看出来了吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马