首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

String str = new String("abc")创办几个对象

2012-12-23 
String str new String(abc)创建几个对象?1.在JVM中存在着一个字符串池,其中保存着很多的String对象,

String str = new String("abc")创建几个对象?
  1.在JVM中存在着一个字符串池,其中保存着很多的String对象,并且可以被共享,因此能提升性能。由于String类是final的,它的值创建后就不可改变,所以不需要担心共享会导致程序混乱.

  2.String var = "king"的执行过程:首先在字符串池中查找是否已经有"king"这样的一个对象,通过String类的equals()来判断;如果有,则不再创建新的对象,直接返回已存在对象的引用;如果不存在,则先创建这样的一个对象,然后将它加入到字符串池中,再将它的引用返回。这也说明了为什么String var1 = "king", String var2 = "king";再比较两者的引用对象(var1 == var2)时是相等的。


  3.而String str = new String("king");创建了两个对象,它的执行过程如下:首是"king",在字符串池中查找"king"对象,如果没有,则在字符串池中创建"king"对象,然后在堆上创建String()对象,将共享字符串池中的"king"(String对象引用的字符串"king"就在字符串池中,不需要在String对象的char[]数组中再保存一份),返回堆上String对象的引用。所以在字符串池中创建一个对象,在堆上创建一个对象,一共是创建了两个对象。


  4.只有使用""+""方式创建的String对象才会加入到字符串池当中, 对于所有包含new方式新创建的对象的"+"连接表达式,它所产生的对象都不会被加入到字符串池中。

  测试代码:

public static void main(String[] args) {String a = "a";String b = "b";String c = "ab";String d = "a" + "b";String e = a + b;System.out.println(c == d);System.out.println(c == e);}



  输出:
  true
  false

热点排行