黑马程序员技术交流社区

标题: 关于String类的一个问题 [打印本页]

作者: 黄诗宾    时间: 2013-2-26 22:53
标题: 关于String类的一个问题
本帖最后由 黄诗宾 于 2013-2-27 09:19 编辑

问题是这样的:
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);
输出了true;

String str3 = "efg";
String str4 = new String("efg");
System.out.println(str3 == str4);
结果是false;

没明白,不是讲
“在String类中如果一个字符串已经明确有了一个对象的指向,则以后其他的String对象如果声明的内容是一样的,则自动指向同一个空间。”  
那为啥第2个例子是false呢?



作者: Benwolf0818    时间: 2013-2-26 23:12
String str4 = new String("efg");这里面是两个对象,不同的对象hashCode不同所以是false
第一个例子比较的是字符串
作者: 贾文泽    时间: 2013-2-26 23:20
  1. String str3 = "efg";              //str3指向字符串常量池中的 efg
  2. String str4 = new String("efg");      //在字符串常量池中已经存在 efg 的情况下,这句代码只创建了一个对象,在堆中,  所以 str4指向了堆中的 efg   
  3. System.out.println(str3 == str4);
复制代码
所以最后结果返回false
作者: amen0205    时间: 2013-2-26 23:36
例子二中str3指向了字符串池中的“efg”,而str4则是在堆中new了一个String对象,该对象的引用变量也是一个String对象“efg”,所以连个引用变量的指向并不相同。而==是用来比较俩个变量的内存地址的,所以是false.
作者: 黄诗宾    时间: 2013-2-27 09:19
欧了 谢谢大家
作者: 焦晨光    时间: 2013-2-27 09:54
享元模式




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