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#
学习了
回复 举报
您需要登录后才可以回帖 登录 | 加入黑马