黑马程序员技术交流社区

标题: 一个String的问题,求解答 [打印本页]

作者: 张利强    时间: 2014-11-12 22:48
标题: 一个String的问题,求解答
String  s1 = “abc”;String  s2 =  new  String(“abc”);
为啥创建s1的时候只有一个对象,而创建s2的时候会产生两个对象呢?

作者: nuddlesW    时间: 2014-11-13 08:31
对于第一种方式·  java有一个字符串缓冲区 你新建一个的时候它会先找缓冲区里有没有这个字符串 如果有 直接返回引用 没有就在里面新建 第二种方式 新建一个 它首先也会去缓冲区里边查找  不管有没有 它都会在堆里新建一个  如果缓冲区里面没有 则在缓冲区里面也新建一个·    例如string s=“tt”        string s1=“tt”    s等于s1 而    string s=new string(“ss”)        string s1=new string(“ss”) s不等于s1
作者: M_______r    时间: 2014-11-13 16:22
第二句话,首先看常量池中有没有"abc"字符串 , 没有就在常量池中创建一个"abc",然后经过new,在堆内存中通过常量池中的字符串"abc"复制一份到堆中然后将堆中此字符串的地址值赋给s2,所以创建了两对象一个在堆中 一个在常量池中
作者: 桃华月禅    时间: 2014-11-13 16:27
第二个说的只是把【“abc”】这个对象赋值给新对象s2而已




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2