1. 对象的创建有两种方式:
String 引用变量名 = “字符串内容”
String 引用变量名 = new String(<参数序列>)
说明: 字符串为空串表示字符串中什么内容也没有,这与null值是不同的,null表示引用没有指向对象。
2. String对象的内存机制
使用简单语法创建字符串对象时,按如下步骤进行:
⑴首先检验字符串常量池中是否存在与要创建的字符串内容相同的对象;
⑵若不存在,则新创建一个包含该内容的字符串对象,并让引用变量指向该对象;
若存在,则将字符串引用直接指向该对象;
使用new语法创建字符串对象时,按如下步骤进行:
⑴首先在堆(不是常量池)中创建一个包含指定内容的字符串对象,并将字符串引用指向该对象;
⑵去字符串常量池中查看,是否存在与该内容相同的对象;
⑶若存在,将new方法创建的字符串对象与已存在的对象联系起来;
⑷若不存在,则在字符串常量池中再创建一个包含该内容的字符串对象,并将堆中的对象与字符串中新创建的字符串对象联系起来。
public String intern()
该方法将返回指定字符串在字符串常量池中对应对象的引用,若其本身就在字符串常量池中,则直接返回自己的引用,若在堆中,则返回字符串常量池中其联系对象的引用。
3. String类的对象内容永远不可变,因而要更改字符串内容,只有将引用指向新的对象,这将浪费内存,StringBuffer类允许对其对象内容进行修改,而不产生冗余的中间对象,,因而可以弥补String类的不足。尤其是在进行大量连接操作的时候。
4. StringBuilder类与StringBuffer类具有同样的功能,不过StringBuilder类的字符串编辑方法并没有同步,在多线程同时操作时可能会产生问题,因此适合单线程操作。