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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Heart 中级黑马   /  2013-6-16 10:00  /  1532 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String str = new String("abc"); 共创建了几个String 对象?

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1 两个或一个

查看全部评分

8 个回复

倒序浏览
两个对象,一个是new String()对象,构造函数的初始化。另一个是"abc"字符串对象,字符串的这种书写格式,就等于在栈内存中生成了一个对象。
回复 使用道具 举报
毕老师在视频里说过,new一个 abc是另一个
回复 使用道具 举报
两个,首先你new出来一个   str  
其次你为了给新的字符串初始化,有创建了"abc"这个字符串     java中双引号中的就是字符串,   你可以理解为是匿名的字符串

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1 赞一个!

查看全部评分

回复 使用道具 举报
“abc”是一个常量对象  位于方法区的常量池   new在堆内存中新建了一个对象    最多两个   str仅仅是引用

评分

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

查看全部评分

回复 使用道具 举报 1 0
张歆明 发表于 2013-6-16 14:24
“abc”是一个常量对象  位于方法区的常量池   new在堆内存中新建了一个对象    最多两个   str仅仅是引用 ...

恩,正解,也有可能是一个
回复 使用道具 举报
张歆明 发表于 2013-6-16 14:24
“abc”是一个常量对象  位于方法区的常量池   new在堆内存中新建了一个对象    最多两个   str仅仅是引用 ...

可以分两种答案
如果abc在字符串池中已经存在,那么就只创建一个对象
如果abc还没存在字符串池中,就创建两个对象
回复 使用道具 举报

String s = new String("abc");
此种方法的实例化产生的是两个对象。
1、"abc"字符串就是一个String类的匿名对象。
2、new一个也产生了一个对象。
如果是通过String s="abc"定义一个变量的话,再声明一个变量String ss="abc",
每次定义一个相同内容的字符串时都只会共享一个空间,也就是在堆内存中只会存在一个对象。
如果是通过new String("abc")产生对象的话,一个字符串就是一个String类的匿名对象,有了字符串"abc",
其实就已经存在了一个对象了,然后又通过new关键字实例化,就会又产生一个对象,
这样原来的那个匿名对象就会成为垃圾,而是用new关键字实例化产生的对象。
所以只产生了两个对象。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马