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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



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

3 个回复

倒序浏览
因为字符串abc本身就是一个对象。s1指向的就是abc这个对象,而s2指向的是一个new的string对象,这个对象的初始化值又是一个对象,所以此时是两个对象
回复 使用道具 举报
String
public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,除非需要 original 的显式副本。

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

嗯,谢谢。了解了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马