Java中的String和String pool

在java中有两种方式创建字符串
1.字面量方式创建字符串
  String name = "tom";

2.new关键字创建字符串
  String name2 = new String("jerry");

------------------------------------
Java中的String pool(字符串常量池)
String pool是java堆内存(heap memory)中的存储字符串的一块区域。

A:

当使用字面量的方式创建字符串时,虚拟机会检查字符串池中的字符串,如果有相同的字符串,那么并不会为新的字符串分配内存空间,而是令它指向字符串常量池中已经存在的那个字符串。这样做的好处是节省了内存的消耗。

注意使用字面量的方式创建的字符串是存储在字符串常量池中的。

如:
        String name = "tom";
        String name2 = "tom";

Java中的String和String pool_第1张图片

当使用new关键字时,

        String name3 = new String("tom");
        String name4 = new String("tom); 

就在java堆内存中创建了一个新的字符串,而不管在字符串池中是否已经存在。
使用new关键字方法每一次都会在堆内存中创建新的字符串。这个字符串对象会一直待在java堆内存中直到被垃圾收集器收集,显然这会影响性能。

注意使用new关键字创建的字符串不存储在字符串常量池中,而是直接在堆内存中。

Java中的String和String pool_第2张图片

你可能感兴趣的:(Java中的String和String pool)