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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

①String s =“abc” 和 String s = new String(  “abc”)  的区别
    String s = "abc" ;虚拟机首先会检查String池里有没有"abc"对象(通过equals 方法) ,
                                  如果有,直接返回引用,如果没有,会在池里创建一个“abc”对象,
                                并返回引用。
    String s1 = "abc";
    String s2 = "abc";
    System.out.println(s1==s2); // result: true

    String str = new String("abc");  不管缓冲池是否有"abc", 都会在堆内存创建一个
                                                       "abc"对象,返回引用 ,此时,负责检查并维护缓冲池,
                                                       其实堆内存的对象是缓冲池中"abc" 对象的一个拷贝。
     String s1 = new String("abc");
     String s2 = new String("abc");
     System.out.println(s1==s2); // result: false
③String s =   “a” +    “b” +    “c” +    “d” 创建了几个对象
    String s = "a" + "b" + "c" + "d"; java 编译器有个合并已知量的优化功能 ,在编译
                                                        阶段就把"a" + "b" + "c" + "d" 合并为 ”abcd  “
    String s = "a" + "b" + "c" + "d"; // 等价于String s = "abcd";
    System.out.println(s=="abcd");// result: true
④String s1 =   “a” String s2 =   “b” String s3 = s1 + s2;
    StringBuilder sb = new StringBuidler(s1); // String 是常量,不能相加的,java 的实现方式为:
    sb.append(s2);
    s3 = sb.toString();
    也就是说实际上 s3 是方法返回的 String 对象 ,凡是方法返回的字符串对象都是在堆内
   存的。
    String s1 = "a";
    String s2 = "b";
    String s3 = s1 + s2; //  堆内存的对象
    System.out.println(s3=="ab");// result: false

评分

参与人数 1技术分 +2 收起 理由
杨佳名 + 2 很不错!

查看全部评分

17 个回复

倒序浏览
:):lol原来如此
回复 使用道具 举报
收藏了。
回复 使用道具 举报
这个不错,收下啦
回复 使用道具 举报
一如既往的详细,支持了~
回复 使用道具 举报
解释的很详细   {:3_53:}
回复 使用道具 举报
ジ旋律 来自手机 中级黑马 2014-10-24 12:53:39
7#
学习了谢谢啊
回复 使用道具 举报
顶一个!!!!
回复 使用道具 举报
学习了!
回复 使用道具 举报
很好受教了,谢谢啦
回复 使用道具 举报
最近这个问题问的比较多.这个帖子很详细,浮上来大家看看
回复 使用道具 举报
很详细,学习了
回复 使用道具 举报
牛人在此。过目一下
回复 使用道具 举报
总结得很好
回复 使用道具 举报
cbb 中级黑马 2014-11-14 09:59:54
15#
不错…加深了string的认知
回复 使用道具 举报
学习了,,,
回复 使用道具 举报
String缓存池和堆内存到底有什么关系?
回复 使用道具 举报
Evred 中级黑马 2014-11-14 11:03:18
18#
学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马