黑马程序员技术交流社区

标题: string问题 [打印本页]

作者: 吕振中    时间: 2013-5-29 00:10
标题: string问题
各位大神,有关于一个string的问题一直没有搞明白。
string a = "abc"为什么是一个对象。
string a = new string("abc")为什么就两个对象了呢?  


作者: 神之梦    时间: 2013-5-29 00:16
String 类比较特殊,
String a = "abc";等效于String a = new String();
我的理解是,凡是字符串都是一个对象,也就是说“abc”已经是一个字符串了
string a = new string("abc");这句话里面new 是一个对象, “abc”又是一个对象,
这不就两个对象了
欢迎指正。。。。。
作者: 刘兆华    时间: 2013-5-29 03:13
我个人认为: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. */
复制代码

作者: 廖志强    时间: 2013-5-29 07:47
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
首先string类型是在常量池里保存,第一种情况是自动装箱不经过堆内存,直接是栈指向常量池,而第二种是栈引用,在堆内存开辟空间,再引用常量池的,
作者: 吴刚—heima    时间: 2013-5-29 10:39
你可以这样理解String a="abc";是一个常量对象,就好比我在前面的帖子说过,就是一个实际的编号为1的苹果,而String a2=new String("abc")则是一个实例化的String 对象,这就好比你从苹果树上取下来一个编号为1的苹果,这两个苹果虽然内容是一样的,但是它们的出处却是不一样的,也就是说它们在内存中存储的地址是不同,这样理解了吗?




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