黑马程序员技术交流社区

标题: 关于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
  1.                 String a="abc";
  2.                 String b="ab";
  3.                 String c=b+"c";
  4.                 if(c==a){   
  5.                         System.out.println(true);
  6.                 }else{
  7.                         System.out.println(false);
  8.                 }
复制代码
输出的结果是false。
a虽然和c的输出结果都一样,但是两个abc所在的内存空间不一样。
也就是说,a和c指向的内存空间不在一个内存地址当中。
所以。==表达式判断的结果会是false。
如果代码是
  1.                 String a="abc";
  2.                 String b="ab";
  3.                 String c=b+"c";
  4.                 if(c.equals(a)){   
  5.                         System.out.println(true);
  6.                 }else{
  7.                         System.out.println(false);
  8.                 }
复制代码
那么,结果会是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