黑马程序员技术交流社区
标题:
我的分析对吗?请高手指点一下吧
[打印本页]
作者:
任黎明
时间:
2014-6-4 11:29
标题:
我的分析对吗?请高手指点一下吧
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.
作者:
Wokno
时间:
2014-6-4 16:31
以下是我的理解:
test.png
(57.14 KB, 下载次数: 43)
下载附件
2014-6-4 16:11 上传
以上是我分析的内存示意图。
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。
希望能帮助到你。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2