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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© FFF 金牌黑马   /  2013-12-23 11:20  /  927 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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?
和上面是同一个问题。

4 个回复

正序浏览
人多知识点就会理解的更透彻,学到了。
回复 使用道具 举报
跟着学习了!
回复 使用道具 举报
一般只有右边全是字符串常量时,也就是双引号""的字符串
编译器会自动优化为一个双引号""的字符串,那么当然会放到常量池
而a+"def",有变量a的参与,那c就不会被优化也就不是常量了,而是放到对象堆里,跟new 的一样

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!很感谢同学的耐心回复!.

查看全部评分

回复 使用道具 举报
不等于,因为a+"def";
a是变量不是常亮
a的值是可变的,编译器不会优化
c因为有变量a,所以是对象引用,不会作为常量放到字符串常量池
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马