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创建的实例的数据在堆中。
不论是字面量还是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修饰的。
近期评论