黑马程序员技术交流社区
标题:
请大神帮我分析下,这个结果是什么啊?
[打印本页]
作者:
惜爱上缘
时间:
2015-7-13 22:32
标题:
请大神帮我分析下,这个结果是什么啊?
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);
}
}
作者:
何鹏程
时间:
2015-7-13 22:36
实际运行了下abc
false
作者:
班小宁
时间:
2015-7-13 22:44
最后输出实际上是在做判断
作者:
Hakka_LGM
时间:
2015-7-13 23:14
本帖最后由 Hakka_LGM 于 2015-7-13 23:16 编辑
这是我的理解。也不知是否准确。。。
public class StringTest {
public static void main(String[] args) {
String s = "abc";
// 返回从角标为1到最后的字符串,在这里即返回"bc"。
// 但在这里没有让s=s.substring(1);所以s还是以前的值"abc"
s.substring(1);
// 用"xyz"替换"bc",在这里即返回"axyz"
// 同上,没有让s=s.replace("bc", "xyz"); 所以s还是以前的值"abc"
s.replace("bc", "xyz");
// 所以输出"abc"
System.out.println(s);
String value = new String("abc");
// value是new出来的。开辟了新的内存空间,
// 那么其地址值与s肯定不一样。即,返回false。
System.out.println(s == value);
}
}
复制代码
作者:
mmppp
时间:
2015-7-13 23:31
楼上正解,就是这个样子。说简单一点就是,第一个求了自集合和做了替换之后,并未赋值给原来的s字符串,所以s字符串并没有发生改变。 二 new 了一个新的字符串,在堆内存中的内存地址值就是不相同的,而==比较的就是两个的内存地址值是否想透明,所以不相同,输出false。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2