String的两种生成方式

第一种是双引号法,效率更高

java为String类提供了缓冲池机制,当使用双引号定义对象时,java环境首先去字符串缓冲池寻找相同内容的字符串,如果存在就直接拿出来应用,如果不存在则创建一个新的字符串放在缓冲池中,如
   String first = "first";
   String second = "first";

   //此时变量first和second使用的均是缓存池中的同一个存储对象
   second ="second";

  //"second"并不存在,在缓存池中创建一个"second"字符串,把变量second的值改变为"second"的地址
   System.out.println(first);

  //变量first中仍是"first"的地址,所以输出"first"

在内存池中地址与固定字符串的对应关系是对应关系是固定不变的,当使用到这些字符串常量时便把其地址赋给那些String类,当String类的内容发生变化也只是把对应的字符串常量(若没有字则在缓存池中创建新的字符串常量)的地址赋给它而已,即使这些字符串常量没有任何引用也不会被回收,直到程序结束,缓存池清空这些字符串常量才会被回收。

 

第二种是调用String的构造方法,此时java环境会跟创建其他类型的对象时一样,每次调用时,都会创建一个新的对象。

 String first = new String("first");
 String second = new String("first");

此时,变量first和second使用的是不同的两个存储对象,只不过对象中的内容恰好相同罢了

 

posted on 2015-10-09 15:01  一个人的合唱  阅读(362)  评论(0)    收藏  举报