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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

写出以下代码执行结果,分析为什么?

  public class Test {
      public static void main(String[] args) {
        String s = "abc";
        s.substring(1);
        s.replace("bc", "xyz");
                System.out.println(s);
                String value = new String ("abc");
                System.out.println(s == value);
    }
  }

11 个回复

倒序浏览
s=s.replace("bc", "xyz");    赋值给s   就可以输出  axyz      String是引用类型
回复 使用道具 举报
柀堓椛開 发表于 2014-8-19 22:51
s=s.replace("bc", "xyz");    赋值给s   就可以输出  axyz      String是引用类型

执行结果却是“abc”跟“false”。。。。。
回复 使用道具 举报
你用的substring和replace都是返回一个字符串,不改变原来字符串的内容的,而且new的value地址值和s不一样,结果是abc和false
回复 使用道具 举报
姜佳文 发表于 2014-8-19 22:57
你用的substring和replace都是返回一个字符串,不改变原来字符串的内容的,而且new的value地址值和s不一样 ...

哦哦哦。。。。谢谢指教!
回复 使用道具 举报
String s = "abc";这个中 S是引用  而 "abc";是在常量池里这里有一个地址,而String value = new String ("abc");这里NEW的对象"abc"是在堆内存中 这里有一个地址 所以他们两个不是同一个地址 所以最后输出System.out.println(s); 这里的S还是原来的abc,而 System.out.println(s == value);这里的 value 指向的是堆内存中的那个地址
回复 使用道具 举报
姜佳文 发表于 2014-8-19 22:57
你用的substring和replace都是返回一个字符串,不改变原来字符串的内容的,而且new的value地址值和s不一样 ...

同意你的观点
回复 使用道具 举报
String一旦被初始化就无法更改,SUBSTRING和REPLACE都是返回一个新的字符串。而value指向一个堆内存中STRING对象ABC,S则指向常量池中的ABC
回复 使用道具 举报
姜佳文 发表于 2014-8-19 22:57
你用的substring和replace都是返回一个字符串,不改变原来字符串的内容的,而且new的value地址值和s不一样 ...

有道理,老毕视频上有这样讲过
回复 使用道具 举报
String类的方法返回值是String的都是返回一个新的字符串,不改变原串的值
回复 使用道具 举报
姜佳文 发表于 2014-8-19 22:57
你用的substring和replace都是返回一个字符串,不改变原来字符串的内容的,而且new的value地址值和s不一样 ...

我也同意你的看法
回复 使用道具 举报
字符串一旦被初始化,就不能被改变,除非你对s重新赋值,它的值才会变
substring()和replace()都是返回一个字符串,但并没有赋值给调用它的对象,所以s的值不会变

value是一个新创建的对象,地址跟s不同
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马