20201224-杜飞强

总结

string细化知识点

如果使用 “ ”符号初始化,则在常量池中存储,当再次遇到一个带有“ ”符号的String实例,则会在String常量池中查找是否有相应的String实例,如没有找到,则构造一个新的String实例,并将实例添加到String常量池中eg:

String s = "hello";
String t = "hello";

分析:当实例t在常量池中找到与之相应的String实例,则将String实例的地址赋值给变量t。

String类中包含三个属性:byte[ ] value ; byte code ; int hash ;

以“ ” 初始化的实例的数据在String常量池中,通过new创建的实例的数据在堆中。

image-20201225085523391

不论是字面量还是new创建的,它们的数组内存地址都是相同的

intern() 方法

intern()方法是返回 String实例 (字符串对象) 的 规范化表示形式

StringBuffer

StringBuffer类直接继承AbstractStringBuilder类(从JDK1.5开始),是最终类,StringBuffer实例中的实例变量是可变的。

StringBuffer类中定义的实例方法会直接修改当前的StringBuffer实例,字符缓冲区中内容是可变的

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。

常用的方法

append(int i):在末尾追加内容

insert(int offset, char c):在索引处插入指定字符

charAt(int index):返回指定索引处的值

delete(int start, int end):删除从[start ,end)之间的字符

indexOf(String str, int fromIndex):返回第一次出现指定字符的索引

reverse( ); 反转字符缓冲区

常用的实例方法

deleteCharAt

删除指定索引的单个字符eg:buffer.deleteCharAt( last ) ;

setCharAt

替换指定索引的单个字符

trimToSize

减少字符序列的存储空间

setLength

设置code的值,减少空间

StringBuffer的比较

StringBuffer和StringBuilder不可以重写Object类的equals方法,可以将StringBuffer 和 StringBuilder转换为String实例后 通过 String类提供的contentEquals 来比较,String类提供了contentEquals( CharSequence ) 和 contentEquals( StringBuffer ) 方法用来比较字符序列的内容是否相等。

StringBuffer和StringBuilder的用法是相同的,它们之间的不同是StringBuffer是线程安全的,绝大多数实例是synchronized修饰符修饰的,而StringBuilder不是线程安全的,所有的实例方法都没有synchronized修饰的。

标签

评论


© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1