黑马程序员技术交流社区
标题:
关于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
String str3 = "efg"; //str3指向字符串常量池中的 efg
String str4 = new String("efg"); //在字符串常量池中已经存在 efg 的情况下,这句代码只创建了一个对象,在堆中, 所以 str4指向了堆中的 efg
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