日期:2014-05-20  浏览次数:20708 次

有关于JAVA string类的问题
最近在学JAVA,在学习string类的时候遇到了一些问题:
  如String a=new String(“abc”);
  这个语句创建了两个对象,一个放在堆中,一个在字符串池中。然后引发了疑问
  1.如String a=new String(“abc”);
  String b=new String(“abc”);
  这两个语句是否只是创建了3个对象?我的解释是因为第二句中的“abc”,由于第一句的缘故在字符串池中已经创建。
  2.如
  String a=new String(“abc”);
  String b=new String(“abc”);
  String c=“abc”;
  此时依然只创建了3个对象。
  即我的理解是,当“abc”在字符池中时,可以被共享,无论是在栈中的引用,还是堆中的对象。
  请大虾指点

------解决方案--------------------
执行:
String a=new String(“abc”);
String b=new String(“abc”);
是创建了3个对象,
执行:
String a=new String(“abc”);的时候,字符池中先去找a,b,c三个字符,构建一个字符串abc
将其指给a这个引用变量,此时已经出现两对象.
再执行 String b=new String(“abc”);就是创建第三个对象。
  


------解决方案--------------------
String a=new String(“abc”);
abc 是字符串的常量
出现“abc”
就在内存中创建了这个字符串
把它用new关键字给了a时
等于是创建一个新的对象a
所以是两个对象
String b=new String(“abc”);就是创建第三个对象。