黑马程序员技术交流社区

标题: 新手技术提问 [打印本页]

作者: 移动小坦克    时间: 2013-2-27 23:45
标题: 新手技术提问
本帖最后由 韩松范 于 2013-3-12 02:38 编辑

String str = "abc"; 和 String str = new String("abc");之间有什么区别?
作者: Benwolf0818    时间: 2013-2-28 00:18
String str = "abc";会在存放于堆中。每调用一次就会创建一个新的对象。
String str = new String("abc");是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。

作者: wahaha    时间: 2013-2-28 09:00
老问题了哈哈
简单说.
1.String str = "abc";创建了一个对象 .str(栈区) 指向常量区的"abc",如果没有,会创建一个"abc"
2.String str = new String("abc");创建了两个对象,一个str(栈区),另一个在堆中,因为new String("abc")了,
                                          注意:只要new了就新创了对象
补充:如果用    ‘==’   来比较这两个对象做,得到的结果是false,equal会得到true
          因为equal比较忽略引用,只比较内容,
作者: 赵家阳    时间: 2013-2-28 09:03
String str = "abc";  在内存中只有一个对象:"abc";
而String str = new String("abc");在内存中有两个对象:先是String对象,然后是"abc"对象。
但是二者的值是一样的。




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