String的两种生成方式

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使用的是不同的两个存储对象,只不过对象中的内容恰好相同罢了

上一篇:CLion之C++框架篇-优化开源框架,引入curl,实现get方式获取资源(四)


下一篇:关于javascript在作用域中的变量定义你所不知道的一些东西