黑马程序员技术交流社区
标题:
关于String的问题、请哪位大虾指点一下
[打印本页]
作者:
金_鑫
时间:
2012-7-26 17:31
标题:
关于String的问题、请哪位大虾指点一下
本帖最后由 金_鑫 于 2012-7-28 13:51 编辑
java code
String a
=
"
ab
"
;
String b
=
"
a
"
+
"
b
"
;
System.out.println(a
==
b);
true
or
false
?
true
String a
=
"
abc
"
;
String b
=
"
ab
"
;
String c
=
b
+
"
c
"
;
System.out.println(a
==
c);
true
or
false
?
作者:
黑马陈旭东
时间:
2012-7-26 17:53
java code String a = "ab";//在常量池里a引用指向ab字符
String b = "a" + "b";//发现字符a和b本身在常量池里就有,所以就不用再创建,所以直接b这个引用也指向这个字符串
System.out.println(a==b); //两个引用指向一个字符串,答案自然是true
String a = "abc";//常量池本身有一串这个字符串
String b="ab";//发现前面的字符串abc跟ab是不一样的,所以这是一个新的引用指向新的字符串
String c=b+"c";//但如果是c="ab"+"c"是true
System.out.println(a==c);
作者:
刘同超
时间:
2012-7-26 17:54
String a="abc";
String b="ab";
String c=b+"c";
if(c==a){
System.out.println(true);
}else{
System.out.println(false);
}
复制代码
输出的结果是false。
a虽然和c的输出结果都一样,但是两个abc所在的内存空间不一样。
也就是说,a和c指向的内存空间不在一个内存地址当中。
所以。==表达式判断的结果会是false。
如果代码是
String a="abc";
String b="ab";
String c=b+"c";
if(c.equals(a)){
System.out.println(true);
}else{
System.out.println(false);
}
复制代码
那么,结果会是true。equals用于比较两个字符串是否相同。
这里有详细的说明和解释:
http://bbs.itheima.com/thread-20534-1-1.html
作者:
罗宵
时间:
2012-7-26 18:05
字符串是放在字符串常量池中的。一旦一个字符串形成后就是不能改变的。String a = "ab"; 创建了字符串"ab", String b = "a" + "b";先不创建,先找常量池中有没有这样的常量字符串.如果有,直接指向.否则.重新创建一个.创建b的时候常量池中已经有"ab"了,所以就直接用"ab",所以a==b是true.
String a = "abc";
String b="ab";
String c=b+"c";
常量池中有"abc" "ab" "c" c=b+"c",因为b的存在,是一个新对象,然后加上"c"就又产生了一个新对象。所以c和a的地址值是不同的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2