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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘源 中级黑马   /  2012-8-2 10:58  /  1441 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘源 于 2012-8-2 19:49 编辑


问题已经解决”。

public class Test{
  public static void main(String[] args)  {
   String s1 = new String("amit");
   System.out.println(s1.replace('m','r')); //打印结果为arit.
   System.out.println(s1); //打印结果为amit
   String s3 = "arit";
   String s4 = "arit";
   String s2 = s1.replace('m','r');
   System.out.println(s2 == s3); //false
   System.out.println(s3 == s4);//ture
   }
}
谁能分析下为什么打印结果是这样啊。都说字符串对象一但建立就不能改变,那为什么会出现红色打印语句啊,谁能够分析下绿色代码不是输出“arit",为什么不等

1 个回复

倒序浏览
字符串一旦创建了就不在改变,之所以会打印false;是因为s1调用替换方法是在对内存中重新生成了一个字符串对象,接着你用s2指向了这个新创建出来的字符串对象,而且创建出来的对象是在堆内存中存储的,想s3、s4这样直接声明字符串的方式相等,是因为字符串有一个字符串缓存池,当你声明s3时,先去池中看有没有这样一个字符串,有就直接取出,没有就创建一个,等到S4再去池中找时,直接就取出来了,所以是同一个对象。所以相等。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马