黑马程序员技术交流社区

标题: 请求高手解答一下字符串初始化的问题 [打印本页]

作者: csu050416    时间: 2015-5-4 23:40
标题: 请求高手解答一下字符串初始化的问题


[size=15.555556297302246px]字符串一旦初始化就不可改变。
[size=15.555556297302246px]如:
   String s1 = "abc";
   String s2 = new String("abc");
s1在内存中代表一个对象,s2在内存中代表两个对象。
请求高手详细解说一下,为什么?s2是新开辟一个空间,存放了abc,那么s2指向应该是开辟的这个地址值,为什么又是两个对象呢?

作者: 殷俊    时间: 2015-5-5 00:05
因为字符串abc本身就是一个对象。s1指向的就是abc这个对象,而s2指向的是一个new的string对象,这个对象的初始化值又是一个对象,所以此时是两个对象
作者: Dylon    时间: 2015-5-5 00:06
String
public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,除非需要 original 的显式副本。

参数:
original - 一个 String。
这是API中String类的其中一个构造方法,和楼主调用的是一样的。
由于里面的参数实际就是一个String的对象,然后你又将这个对象的内容赋给了一个新的对象即s2,所以有两个对象。
作者: csu050416    时间: 2015-5-5 00:12
Dylon 发表于 2015-5-5 00:06
String
public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序 ...

嗯,谢谢。了解了。




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