使用new创建字符串对象的步骤如下。
1. 首先在堆(不是常量池)中创建一个包含指定内容的字符串对象,并将字符串引用指向该对象。
2. 去字符串常量池中查看,是否有包含该内容的对象。
3. 若有,则将new出来的字符串对象与字符串常量池中内容相同的对象联系起来。
4. 若没有,则在字符串常量池中再创建一个包含该内容的字符串对象,并将堆中的对象与字符串常量池中新创建出来的对象联系起来。
------------
可以通过 public String intern() 方法来检测:普通堆中的字符串对象 对应的 字符串常量池中的对象。
public String intern() 方法:是将指定字符串对象在字符串常量池中对应对象的引用返回。
---------------
这样做的目的是为了:提高字符串的比较速度。
字符串特殊的内存机制带来的好处,即是:不管字符串多长,其比较速度都是一样的。因为在比较两个字符串内容是否相同时,不必真去考察内容,只需比较两个字符串联系的常量池中对象是否为同一个即可。这也就将对内容的比较转化为对引用的比较,大大提高了速度。
|