黑马程序员技术交流社区

标题: 关于String的对象问题 [打印本页]

作者: xkfxm    时间: 2013-7-4 09:50
标题: 关于String的对象问题
本帖最后由 xkfxm 于 2013-8-5 10:59 编辑

String s1 = "abcd";
String s2 = new String("abcd");
s1和s2的区别:s1在内存中有一个对象
                         s2在内存中有两个对象
new String()是一个对象,“abcd”是另一个对象。s2指向了new String();     new String()指向了“abcd”。所以说s2在内存中有两个对象。是这样理解吗


作者: 我叫林磊    时间: 2013-7-4 10:22
new String()开辟栈内存,栈内存里面存放的是"abcd"的地址。"abcd"存放在常量池中,字符串以拼接的形式存放,可以理解为一个对象。
作者: ㄗs:/|丶hearts    时间: 2013-7-4 10:28
String  s= new String(   "abcd");    首先在string池内找,找到,不创建string对象;否则创建对象,这样就一个string对象   
遇到new运算符号了,在内存上创建string对象,并将其返回给s,又一个对象  
作者: 29198102shihao    时间: 2013-7-4 11:23
String类在栈中有String pool,但使用直接赋值的方式生成字符串时,1先在String pool里找是否有“abcd“”对象,如果有直接将其地址返回,如果没有就new一个,并放在pool里。
只要通过new的方式,String a=new String(“abcd”);总会在堆里生成新的对象,返回堆地址,不会用到pool里的,也是会先检查pool,pool里有“abcd”,就执行上面操作,没有现在pool里创建对象,在执行上面操作。






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