黑马程序员技术交流社区

标题: 字符串对象创建问题 [打印本页]

作者: Heart    时间: 2013-6-16 10:00
标题: 字符串对象创建问题
String str = new String("abc"); 共创建了几个String 对象?
作者: 王磊    时间: 2013-6-16 13:21
两个对象,一个是new String()对象,构造函数的初始化。另一个是"abc"字符串对象,字符串的这种书写格式,就等于在栈内存中生成了一个对象。
作者: 薛淑凯    时间: 2013-6-16 13:28
毕老师在视频里说过,new一个 abc是另一个
作者: mulua    时间: 2013-6-16 14:20
两个,首先你new出来一个   str  
其次你为了给新的字符串初始化,有创建了"abc"这个字符串     java中双引号中的就是字符串,   你可以理解为是匿名的字符串
作者: 张歆明    时间: 2013-6-16 14:24
“abc”是一个常量对象  位于方法区的常量池   new在堆内存中新建了一个对象    最多两个   str仅仅是引用
作者: Heart    时间: 2013-6-16 14:44
张歆明 发表于 2013-6-16 14:24
“abc”是一个常量对象  位于方法区的常量池   new在堆内存中新建了一个对象    最多两个   str仅仅是引用 ...

恩,正解,也有可能是一个
作者: 张承富    时间: 2013-6-17 12:22
张歆明 发表于 2013-6-16 14:24
“abc”是一个常量对象  位于方法区的常量池   new在堆内存中新建了一个对象    最多两个   str仅仅是引用 ...

可以分两种答案
如果abc在字符串池中已经存在,那么就只创建一个对象
如果abc还没存在字符串池中,就创建两个对象
作者: zhengweicong    时间: 2013-6-17 12:29

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

作者: 孙百鑫    时间: 2013-6-22 01:45
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2