A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄诗宾 高级黑马   /  2013-2-26 22:53  /  1897 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄诗宾 于 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呢?


5 个回复

倒序浏览
String str4 = new String("efg");这里面是两个对象,不同的对象hashCode不同所以是false
第一个例子比较的是字符串
回复 使用道具 举报
  1. String str3 = "efg";              //str3指向字符串常量池中的 efg
  2. String str4 = new String("efg");      //在字符串常量池中已经存在 efg 的情况下,这句代码只创建了一个对象,在堆中,  所以 str4指向了堆中的 efg   
  3. System.out.println(str3 == str4);
复制代码
所以最后结果返回false
回复 使用道具 举报
例子二中str3指向了字符串池中的“efg”,而str4则是在堆中new了一个String对象,该对象的引用变量也是一个String对象“efg”,所以连个引用变量的指向并不相同。而==是用来比较俩个变量的内存地址的,所以是false.
回复 使用道具 举报
欧了 谢谢大家
回复 使用道具 举报
享元模式
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马