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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 移动小坦克 中级黑马   /  2013-2-27 23:45  /  1642 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩松范 于 2013-3-12 02:38 编辑

String str = "abc"; 和 String str = new String("abc");之间有什么区别?

3 个回复

倒序浏览
String str = "abc";会在存放于堆中。每调用一次就会创建一个新的对象。
String str = new String("abc");是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。
回复 使用道具 举报
老问题了哈哈
简单说.
1.String str = "abc";创建了一个对象 .str(栈区) 指向常量区的"abc",如果没有,会创建一个"abc"
2.String str = new String("abc");创建了两个对象,一个str(栈区),另一个在堆中,因为new String("abc")了,
                                          注意:只要new了就新创了对象
补充:如果用    ‘==’   来比较这两个对象做,得到的结果是false,equal会得到true
          因为equal比较忽略引用,只比较内容,
回复 使用道具 举报
String str = "abc";  在内存中只有一个对象:"abc";
而String str = new String("abc");在内存中有两个对象:先是String对象,然后是"abc"对象。
但是二者的值是一样的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马