黑马程序员技术交流社区

标题: String定义后不变的的问题、 [打印本页]

作者: FFF    时间: 2013-12-23 11:20
标题: String定义后不变的的问题、
本帖最后由 FFF 于 2013-12-23 11:31 编辑
  1. String a = "abc";                                //声明了一个String对象abc
  2.      String b = new String("abc");        //声明一个新的String对象
  3. String c = a+"def";
  4. 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