黑马程序员技术交流社区
标题:
String定义后不变的的问题、
[打印本页]
作者:
FFF
时间:
2013-12-23 11:20
标题:
String定义后不变的的问题、
本帖最后由 FFF 于 2013-12-23 11:31 编辑
String a = "abc"; //声明了一个String对象abc
String b = new String("abc"); //声明一个新的String对象
String c = a+"def";
String d = "abcdef";
复制代码
问题1:
c是否等于d
问题2:
为什么?
c=abc+def的时候,内存中不存在,则建立了一个。
而d没有new没有新建,为什么c与d使用==比较时不相等?
String a = "Hello"
String b = a+"Word";
String c = "HelloWord";
b==c?
和上面是同一个问题。
作者:
张鹏
时间:
2013-12-23 11:25
不等于,因为a+"def";
a是变量不是常亮
a的值是可变的,编译器不会优化
c因为有变量a,所以是对象引用,不会作为常量放到字符串常量池
作者:
张鹏
时间:
2013-12-23 11:31
一般只有右边全是字符串常量时,也就是双引号""的字符串
编译器会自动优化为一个双引号""的字符串,那么当然会放到常量池
而a+"def",有变量a的参与,那c就不会被优化也就不是常量了,而是放到对象堆里,跟new 的一样
作者:
651012160
时间:
2013-12-23 13:41
跟着学习了!
作者:
刘旭升
时间:
2013-12-23 16:15
人多知识点就会理解的更透彻,学到了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2