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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class StringTest {
        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);
        }
}

4 个回复

倒序浏览
实际运行了下abc
false
回复 使用道具 举报
最后输出实际上是在做判断
回复 使用道具 举报
本帖最后由 Hakka_LGM 于 2015-7-13 23:16 编辑

这是我的理解。也不知是否准确。。。
  1. public class StringTest {
  2.         public static void main(String[] args) {

  3.                 String s = "abc";

  4.                 // 返回从角标为1到最后的字符串,在这里即返回"bc"。
  5.                 // 但在这里没有让s=s.substring(1);所以s还是以前的值"abc"
  6.                 s.substring(1);

  7.                 // 用"xyz"替换"bc",在这里即返回"axyz"
  8.                 // 同上,没有让s=s.replace("bc", "xyz"); 所以s还是以前的值"abc"
  9.                 s.replace("bc", "xyz");

  10.                 // 所以输出"abc"
  11.                 System.out.println(s);

  12.                 String value = new String("abc");

  13.                 // value是new出来的。开辟了新的内存空间,
  14.                 // 那么其地址值与s肯定不一样。即,返回false。
  15.                 System.out.println(s == value);
  16.         }
  17. }
复制代码
回复 使用道具 举报 1 0
楼上正解,就是这个样子。说简单一点就是,第一个求了自集合和做了替换之后,并未赋值给原来的s字符串,所以s字符串并没有发生改变。    二    new 了一个新的字符串,在堆内存中的内存地址值就是不相同的,而==比较的就是两个的内存地址值是否想透明,所以不相同,输出false。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马