黑马程序员技术交流社区
标题:
String 问题
[打印本页]
作者:
马如龙
时间:
2014-6-16 21:47
标题:
String 问题
String a = "abc"; 和
String b = new String("abc");
有什么区别
System.out.println(a==b);
结果为 false
为什么不一样
作者:
人心如水
时间:
2014-6-16 22:40
这题是考的String类那一块,老师刚讲过,
String a = "abc"; 这是一个建立了一个“abc”对象,直接把地址值给a
String b = new String("abc");这里建立了两个对象,一个是new String对象,一个是“abc”对象,b只是指向new String对象
比较a==b是比较的地址值,肯定不同的
作者:
人心如水
时间:
2014-6-16 22:45
接我上面说的,如果代码改成System.out.println(b.equals(a));就肯定是返回true 应为是比较的对象的值。
作者:
ゞ导火索゛
时间:
2014-6-16 22:56
a==b比较的是两个对象的地址,因为a指向的字符串缓冲区中的字符串地址,而b指向的是堆内存中的new出来的字符串对象
作者:
轩辕冰晨
时间:
2014-6-16 23:29
String a = "abc"; 只有一个对象 "abc"
String b = new String("abc"); 有两个对象 new String() 和 "abc"
System.out.println(a==b);
==是比较两个对象地址引用,a指向的地址和b指向的地址不是同一个,new String("abc");是在对内存中新开辟的空间
结果为 false
为什么不一样
作者:
江夷
时间:
2014-6-16 23:44
String a = "abc"; 只创建一个对象
String b = new String("abc");创建了 new String()和“abc”两个对象
a==b 比较的是两个对象的地址值
同时跟这个比较类似的题目还有
String a = "hello";
String b = "world";
String c = "helloworild";
System.out.println(c==a+b); 这个结果同样是false
但如果是:
String a = "hello";
String b = "world";
System.out.println("helloworild"==a+b);
这个结果楼主可以输出下,应该就可以理解了
作者:
北极£莜蓝
时间:
2014-6-16 23:51
本帖最后由 北极£莜蓝 于 2014-6-17 00:09 编辑
String a = "abc" ,直接在常量池中构建 "abc"对象,将该对象的值赋值给a,,String b = new String("abc");需要在创建对象,在堆内存中开辟空间,, 开辟完空间之后,需要在常量池中构建"abc"对象,将该对象的地址值存储到堆内存的空间中,然后将堆内存中的地址值赋值给b,.相当于创建了两个对象,一个在堆中,一个在常量池中.
作者:
北极£莜蓝
时间:
2014-6-16 23:52
= = 比较的是引用数据类型时,比较的是他们的地址值,
作者:
北极£莜蓝
时间:
2014-6-17 00:00
他们的地址不同就是FALSE
作者:
马如龙
时间:
2014-6-17 01:22
北极£莜蓝 发表于 2014-6-17 00:00
他们的地址不同就是FALSE
原来是地址值 谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2