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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吕振中 中级黑马   /  2013-5-29 00:10  /  1392 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位大神,有关于一个string的问题一直没有搞明白。
string a = "abc"为什么是一个对象。
string a = new string("abc")为什么就两个对象了呢?  

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 鼓励

查看全部评分

5 个回复

倒序浏览
String 类比较特殊,
String a = "abc";等效于String a = new String();
我的理解是,凡是字符串都是一个对象,也就是说“abc”已经是一个字符串了
string a = new string("abc");这句话里面new 是一个对象, “abc”又是一个对象,
这不就两个对象了
欢迎指正。。。。。

评分

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

查看全部评分

回复 使用道具 举报
我个人认为:String a="abc" 是将 String  a在内存中的引用地址指向abc (如果有的话)。  而String a=new String("abc");则是不管内存中有没有"abc"都会去创建一个

  1. String a="abc";
  2. String a3="abc";
  3. String a1=new String("abc");
  4. String a2=new String("abc");
  5. System.out.println(a==a1);
  6. System.out.println(a1==a2);
  7. System.out.println(a==a3);
  8. /*
  9. 运行结果为:
  10. false
  11. false
  12. true
  13. */
复制代码

评分

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

查看全部评分

回复 使用道具 举报
C:\Documents and Settings\Administrator\桌面String a = "abc";等效于String a = new String();但不相等,String a = "abc";其实是吧字符串自动装箱了,但是没有在堆内存里开辟空间,"abc"只是在常量池里直接指向了栈内存;而String a = new String();是先在堆内存里开辟了一个空间,"abc"在常量池里,有两个地址值,给亲一个内存吧。
回复 使用道具 举报
yasyas001 来自手机 中级黑马 2013-5-29 09:06:24
报纸
首先string类型是在常量池里保存,第一种情况是自动装箱不经过堆内存,直接是栈指向常量池,而第二种是栈引用,在堆内存开辟空间,再引用常量池的,
回复 使用道具 举报
你可以这样理解String a="abc";是一个常量对象,就好比我在前面的帖子说过,就是一个实际的编号为1的苹果,而String a2=new String("abc")则是一个实例化的String 对象,这就好比你从苹果树上取下来一个编号为1的苹果,这两个苹果虽然内容是一样的,但是它们的出处却是不一样的,也就是说它们在内存中存储的地址是不同,这样理解了吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马