黑马程序员技术交流社区

标题: 求大神帮忙分析下!!! [打印本页]

作者: 殷挥笔    时间: 2013-11-10 22:46
标题: 求大神帮忙分析下!!!
  1. public class Test {
  2. public static void main(String[] args) {
  3. String s = "abc";
  4. s.substring(1);
  5. s.replace("bc", "xyz");
  6. System.out.println(s);
  7. String value = new String ("abc");
  8. System.out.println(s == value);
  9. }
复制代码
运行结果为:
abc
false

求解这是为什么?

作者: 中关村阿旺    时间: 2013-11-10 23:08
String类的subString()方法返回一个新字符串,它是此字符串的一个子字符串。
你虽然调用了这个方法,但是你并没有让它的返回结果重新赋给s对象。
replace()方法同理。
所以,s对象仍然指向字符串"abc"。
至于为什么==号比较返回false,是因为两个对象的内存地址不同。
String value = new String ("abc");这句代码中的new关键字会在内存中又创建一个字符串对象,
所以两个字符串对象的内存地址不同,返回false。
作者: 月生春    时间: 2013-11-10 23:25
public class Test {
public static void main(String[] args) {
String s = "abc";                     
s.substring(1);                     //截取1角标以后的元素  ,但是对象s没有改变 还是“abc”字符串对象一旦在堆内存中就不会改变
s.replace("bc", "xyz");                                                   //将“bc”替换为“xyz”, 同理 是还是"abc”
System.out.println(s);                                 // 打印的结果为“abc”
String value = new String ("abc");             //创建了一个新的字符串对象 new String("abc")
System.out.println(s == value);             // s 和value 是两个不同的字符串 ,不是同一对象 所以运行结果为  false
}
不知道这样解释你能否理解,欢迎交流

作者: hel    时间: 2013-11-11 04:36
String一旦创建了对象他在内存中的数据就不会改变,
s.substring(1);         你并没有建立对象引用,
String ss = s.replace("bc", "xyz");      当你建立引用后,如果你在打印 S 的值还是abc,     

作者: hurryup    时间: 2013-11-11 08:20
1.string类是final类型,一经赋值,无法更改,对String 对象的任何操作都是无效的,只要不重新指向该对象
2.对象s和对象value 是两个不同的对象,指向内存中不同的操作地址符,所以为假
作者: 王雨神    时间: 2013-11-11 09:03
String s = "abc";
s.substring(1);
s.replace("bc", "xyz");
String一旦创建了对象他在内存中的数据就不会改变,
这个你只进行了一次赋值,后面俩个方法有返回值但是你没传给s呀!
这样写就行了
String s = "abc";
s=s.substring(1);
s=s.replace("bc", "xyz");
作者: 黄炳期    时间: 2013-11-11 09:07
帖子已分类





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2