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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM张勇 高级黑马   /  2013-6-2 20:44  /  1692 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM张勇 于 2013-6-5 23:05 编辑

毕老师第13天的01课程中,关于
  1. //问题:两句话的区别?
  2. String s1 = "abc";
  3. String s2 = new String("abc");
  4. //回答:s1在内存中有一个对象,s2在内存中有两个对象。
复制代码


s2在内存中有2个对象,这两个对象分别是什么?都存放在哪里?请指点下,多谢!

7 个回复

倒序浏览
"abc"是在常量池中,new出来的是在堆内存中,所以有两个对象
回复 使用道具 举报
new String("abc")
字符串在内存中会有专门的常量池来记住存储。所以,毫无疑问。先把“abc”作为字符串存起来。这个应该理解吧?
但是因为new String("abc")这是个匿名对象。而匿名对象是要在对内存中开辟空间的。所以它会在对内存中开辟空间。然后再次把“abc”存储起来。
所以s2中俩个对象一次作为字符串进常量池,一次作为对象进堆内存。
回复 使用道具 举报
小羽天空 发表于 2013-6-2 21:10
new String("abc")
字符串在内存中会有专门的常量池来记住存储。所以,毫无疑问。先把“abc”作为字符串存 ...

new String("abc")这是个匿名对象,这句话没反应过来,能解释下吗?
回复 使用道具 举报
String s=“java”,是指开辟一个对象空间,用来存储java,
String s=new String(”java“),一、开辟一个对象空间存储java,二、new一个String类型的对象存储java。
回复 使用道具 举报
String s1 = "abc";
这个在 data segment 中搞出一个 abc对象
String s2 = new String("abc");
这个 首先在 heap中new 出来一个String对象出来
然后 s2是在stack中指向这个new出来的对象  然后这个new出来的对象又会去寻找data segment中看他有没有abc这个字符串,
data segment会对内存有一个优化作用,也就是说 如果data segment中有了abc这个对象,他就不会再创建了,然后直接指向他就OK了
这也就是说  new出来的对象指向了 这个已经创建出来的abc 。   
回复 使用道具 举报
String s1 = "abc";//这是赋值,这是把"abc"赋值给String类型的变量s1,
String s2 = new String("abc");//这里建立String的对象,并传入字符串"abc"
至于哥们儿你说存在于什么位置,这个我也有些郁闷了,请给全部的源码.因为像String s1 = "abc";我也不知道你是在给成员变量赋值,还是在给局部变量赋值...
哎,以后问问题请写详细,这样才好解决,希望能帮到你!

回复 使用道具 举报
HM张勇 发表于 2013-6-2 21:18
new String("abc")这是个匿名对象,这句话没反应过来,能解释下吗?

String  a ; a 是String对象,a 就是他的名字,;new  String();只是分配空间对象没有命名所以是“匿名”的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马