黑马程序员技术交流社区
标题:
求解关于String类?
[打印本页]
作者:
朝花夕拾
时间:
2012-12-3 22:22
标题:
求解关于String类?
本帖最后由 张雄 于 2012-12-4 22:08 编辑
public class Test1{
public static void main(String[] args) {
String strValue="ABCDEFG";
strValue.substring(3);
strValue.concat("123");
System.out.println("result=" + strValue);
String value = new String ("ABCDEFG");
System.out.println(strValue== value);
}
}
该代码中为什么输出结果是 result=ABCDEFG,false,求解释
作者:
程宏志
时间:
2012-12-3 22:40
字符串String是一个对象,既然是一个对象,那么一旦给对象实例化后,对象的只是不会改变的!
在这里面
strValue.substring(3); 这是得到一个新的字符串对象
strValue.concat("123"); 这也是得到一个新的字符串对象
System.out.println(strValue== value);
这句话中你应该明白一个通过==来比较比的什么,在这里比较的是对象,两个不同的对象来比,地址值不相同,随意是false。
如果value="ABCDEFG";那结果就是true了,那是因为,strvalue和value的地址值指向的是同一个值
作者:
杨卫腾
时间:
2012-12-3 22:51
怎么不是这个结果:
哥们这个两个方法都是返回一个新的字符串呀!就是在原来字符串的基础上
截取一段作为新的字符串,原来的字符串是不会改变的,一个字符串要是
一旦创建出来的话是不会改变的。 要是你的是这样的语句:
strValue = strValue.substring(3);
strValue = strValue.concat("123");
那么原来的字符串也是没有改变的,只是引用改变了。
作者:
赵学刚
时间:
2012-12-3 22:58
public class Test1{
public static void main(String[] args) {
String strValue="ABCDEFG";
System.out.println(strValue.substring(3)) ;
System.out.println(strValue.concat("123"));
System.out.println("result=" + strValue);
String value = new String ("ABCDEFG");
System.out.println(strValue.toCharArray().hashCode());
System.out.println(value.toCharArray().hashCode());
System.out.println(strValue== value);
}
}
输出:DEFG
ABCDEFG123
result=ABCDEFG
21287110
15111830
false
通过这个结果就能很好理解字符串类型的不变性,无论你做什么对初始值 strValue,==是比较对象的,21287110
15111830是两个不同的地址自然不会相等的。
作者:
黑马刘向阳
时间:
2012-12-3 22:59
strValue.substring(3);
strValue.concat("123"); 这两个方法分别返回一个新的字符串
字符串一经创建,就不能修改, strValue没有被重新赋值新的字符串,所以不变。
String strValue="ABCDEFG"; 是在常量池内存放了"ABCDEFG",然后strValue 指向"ABCDEFG"
String value = new String ("ABCDEFG");其实创建了两个对象,一个是value,value存放的是堆内存中的地址,一个是"ABCDEFG"
==号是比较栈内存中两个变量strValue和value指向的地址是否相等,所以返回false;
String类重写了equals()方法,使用equals()方法比较就会返回true
作者:
马纵驰
时间:
2012-12-4 08:34
字符串在strValue.substring(3); strValue.concat("123");在内存中并没有改变其值。只是做了两个方法调用。而==比较的是地址。ABCDEFG是池中的常量,而new出的ABCDEFG是堆中的实体。地址是不一样的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2