黑马程序员技术交流社区

标题: 为什么说String s=new String("abc")在内存中有两个对象? [打印本页]

作者: 李哲    时间: 2012-3-15 09:11
标题: 为什么说String s=new String("abc")在内存中有两个对象?
教程没有详细说明,大家知道吗?
作者: 黑马肖凯骏    时间: 2012-3-15 09:14
String 本身是一个类,所以String="abc"开辟了一个空间 当使用new语句的话,就会再开辟一个空间
字符串本身会占用一个空间
作者: 张润政    时间: 2012-3-15 09:30
这条语句,使用了一个带有String类型参数的构造函数String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
既然是副本,那就相当于克隆了一个。。
它相当于。String str = null;   String s1 = “abc“;  str = new String(s1);
看清楚了吗,这里边存在两个对象:一个是str,一个是s1。
作者: djx900    时间: 2012-3-15 09:31
abc是一个  new 就是又1个
作者: 李深山    时间: 2012-3-15 09:41
String有个构造器,返回的是String对象;“abc”本身是一个String对象,构造出来的是这个String对象的副本。
public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,除非需要 original 的显式副本。
作者: 张华廷    时间: 2012-3-15 09:46
String 本身是一个类, 当使用new语句的话,就会开辟一个空间字符串会占用一个空间,string="abc"又开辟一个空间字符串,所以会出现两个对象。
作者: 孙地豪    时间: 2012-3-15 09:59
1.    "abc"本身就是一个直接常量 所有在把他存在内存数据区中
2.    new String("abc")  在堆内存中;
作者: liumeng    时间: 2012-3-15 11:04
str="abc"不是加到字符串常量池中么 如果有“abc”则使用常量池中的,否则,创建一字符串 “abc” 我想应该加的内存中把




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