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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任黎明 中级黑马   /  2014-6-4 11:29  /  2040 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)

        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);
                }
       }
答案:
        运行结果为:
        abc
        false
        分析:
                字符串一旦初始化就不会再改变,s.substring()和s.replace("bc","xyz")均返回一个新的字符串,
        并未改变s的内容,所以输出的仍然是abc.
                ==比较的是字符串s和value的地址值,他们是两个不同的对象,在内存中的地址值是不同的,所以打
        印结果是false.
       


1 个回复

倒序浏览
以下是我的理解:

以上是我分析的内存示意图。
String s = "abc";  //在data segment内分配空间并将字符串“abc”存入其中,并将其地址存入栈中的s中。
s.substring(1);  //从位置1处截取s字符串并返回,注意没有存入s字符串中。
s.replace("bc", "xyz"); //返回一个新的字符串,并用字符串“xyz”代替原字符串的“bc”,注意也没有存入s字符串中。
System.out.println(s); //打印字符串s的内容。
String value = new String("abc"); //在heap中new一个对象,并将在data segment中为新的字符串“abc”分配的空间的地址存入堆中的字符串对象中。,并将对象的地址赋给stack中的value变量。
System.out.println(s == value); //打印s是否等于value。

希望能帮助到你。。。。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马