2.5 创建字符串的方式
创建字符串的方式归纳起来有两类:
-
使用""引号创建字符串;
-
使用new关键字创建字符串;
总结如下:
-
单独使用""引号创建的字符串都是常量,编译期就已经确定存储到String Pool中;
-
使用new String("")创建的对象会存储到堆(heap)中,是运行期新创建的;
new创建字符串时首先查看池中是否有相同值的字符串,如果有,则拷贝一份到堆中,然后返回堆中的地址;如果池中没有,则在堆中创建一份,然后返回堆中的地址,(注意,此时不需要从堆中复制到池中,否则,将使得堆中的字符串永远是池中的子集,导致浪费池的空间!)
-
使用只包含常量的字符串连接符如"aa"+"aa"创建的也是常量,编译期就能确定,已经确定存储到String Pool中;
-
使用包含变量的字符串连接符如"aa"+s1创建的对象是运行期才创建的,存储到堆(heap)中;