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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张利强 中级黑马   /  2014-11-12 22:48  /  986 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String  s1 = “abc”;String  s2 =  new  String(“abc”);
为啥创建s1的时候只有一个对象,而创建s2的时候会产生两个对象呢?

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

3 个回复

倒序浏览
对于第一种方式·  java有一个字符串缓冲区 你新建一个的时候它会先找缓冲区里有没有这个字符串 如果有 直接返回引用 没有就在里面新建 第二种方式 新建一个 它首先也会去缓冲区里边查找  不管有没有 它都会在堆里新建一个  如果缓冲区里面没有 则在缓冲区里面也新建一个·    例如string s=“tt”        string s1=“tt”    s等于s1 而    string s=new string(“ss”)        string s1=new string(“ss”) s不等于s1
回复 使用道具 举报
第二句话,首先看常量池中有没有"abc"字符串 , 没有就在常量池中创建一个"abc",然后经过new,在堆内存中通过常量池中的字符串"abc"复制一份到堆中然后将堆中此字符串的地址值赋给s2,所以创建了两对象一个在堆中 一个在常量池中
回复 使用道具 举报
第二个说的只是把【“abc”】这个对象赋值给新对象s2而已
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马