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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范晓冲 中级黑马   /  2014-1-13 10:30  /  1325 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 范晓冲 于 2014-1-14 10:55 编辑
  1. public class StringDes130101{
  2.                 public static void main(String[] args){
  3.                                 String s1="abc";
  4.                                 String s2=new String("abc");        
  5.                                 //毕老师说s1和s2的区别是:
  6.                                 /*
  7.                                   s1在内存中有1个对象,==>这一句理解
  8.                                   s2在内存中有2个对象,==>这一句不太明白,能否详细解释一下?谢谢
  9.                                 */
  10.                 }        
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 圆满!

查看全部评分

5 个回复

倒序浏览
String s2=new String("abc");
堆中一个是new的结果,当然放在堆中“abc”, 常量池中一个是“abc” ,s2只是个引用 不是对象
首先在string池内找,找到?不在池内创建string对象,否则创建, 这样就一个string对象  
遇到new运算符号了,在内存(堆里)上创建string对象,并将其返回给s2,又一个对象

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 陈星宇 于 2014-1-13 22:10 编辑

String s2=new String("abc")在堆内存中创建s2的引用,然后在字符串常量池找“abc"。下面用画图来说明更好些。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
这位同学你好,这个问题是这样的。首先,abc是个字符串没错吧,既然是字符串那么它本身就应该是存储在堆内存中的,这是一个对象;然后,我们用new新建了一个字符串对象,它的内容为参数“abc”,也可以理解为新对象是字符串“abc”的一个副本,这也是一个对象,加起来这不就是两个对象了嘛

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢,谢谢版主,非常感谢:)
回复 使用道具 举报
new是一个对象 字符串又是一个对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马