String、StringBuffer、StringBuilder区别
String:不可变,线程安全的,效率低。
StringBuffer:可变,线程安全的,效率低。
StringBuilder:可变,线程不安全,效率低。(用法与StringBuilder基本一致)
String
- String对象的值为什么不能修改?
String的底层是final修饰的cahr[]。
- 在String中空不等于Null。
Null是引用的内容不存在(不指向任何对象),不指向任何对象。
空是指引用指向某个对象,但是对象的内容为空。
String方法:
方法 | 描述 |
---|---|
public String() | 创建一个空的字符串对象 |
public String(String value) | 创建一个值为value的字符串对象 |
public String(char value[]) | 将一个char数组转换为字符串对象 |
public String(char value[],int offset,int count) | 将一个指定范围的char数组转换为字符串对象(count为截取长度) |
public String(byte value[]) | 将一个byte数组转换为字符串对象 |
public String(byte value,int offset,int count) | 将一个指定范围的byte数组转换为字符串对象(count为截取长度) |
public int length() | 获取字符串的长度 |
public boolean isEmpty() | 判断字符串是否为空 |
public char charAt(int index) | 返回指定下标字符 |
public byte[] getBytes() | 返回字符串对应的byte数组 |
public boolean equals(Object o) | 判断两个字符串值是否相等 |
public boolean equalsIgnoreCase(Object o) | 判断两个字符串是否相等(忽略大小写) |
public int compareTo(String value) | 比较两个字符串,返回差值 |
public int compareToIgnoreCase(String value) | 比较两个字符串,返回差值(忽略大小写) |
public boolean startWith(String value) | 判断字符是否以value开头 |
public boolean endWith(String value) | 判断字符是否以value结尾 |
public int hashCode() | 返回哈希值 |
public int indexOf(String str) | 返回下标 |
public int indexOf(String str,int formIndex) | 从指定位置开始查找下标 |
public String subString(int beginIndex) | 从指定位置开始截取字符串 |
public String subString(int beginIndex,int endIndex) | 截取指定区间的字符串 |
public String concat(String str) | 追加字符串 |
public String replaceAll(String o,String n) | 将字符串中所有o替换为n |
public String[] split(String regex) | 用指定字符分割,返回数组 |
public String toLowerCase() | 转小写 |
public String toUpperCase() | 转大写 |
public char[ ] toCharArray() | 将字符串转为字符数组 |
StringBuffer
StringBuffer可以解决String频繁修改造成的空间资源浪费问题。
StringBuffer线程安全,效率低。StringBuilder线程不安全,效率高。
StringBuffer的底层也是字符数组来存值
-
StringBuffer的默认数组长度为16(无参)
public StringBuffer() { super(16); }
-
使用有参的长度为值得长度+16
public StringBuffer(String str) { super(str.length() + 16); append(str); }
注意:
- StringBuffer并没有重写Object类的equals方法,即比较方式与“==”一样
- StringBuffer的length()方法输出的是值所占的长度
- 如果追加的字符串超出现有长度,则会将数组扩容,不更换对象,内部调用父类方法ensureCapacityInternal()方法对数组进行扩容。
方法:
方法 | 描述 |
---|---|
publice String Buffer() | 创建一个空的StringBuffer对象 |
public StringBuffer(String str) | 创建一个值为str的StringBuffer对象 |
public synchronized int length() | 返回数组中数据的长度 |
public synchronized int char charAt(int index) | 返回指定位置的字符 |
public synchronized StringBuffer append(String str) | 追加内容 |
public synchronized StringBuffer delete(int start,int end) | 删除指定区间的值 |
public synchronized StringBuffer deleteCharAt(int index) | 删除指定位置字符 |
public synchronized StringBuffer raplace(int start,int end,String str) | 将指定区间的值替换成str(指定区间长度可以与str长度不相等) |
public synchronized StringBuffer substring(int start) | 从指定位置开始截取字符串 |
public synchronized StringBuffer substring(int start,int end) | 从指定区间开始截取字符串 |
public synchronized StringBuffer insert(int offset,String str) | 在指定位置插入str |
public int indexOf(String str) | 从头开始查找指定字符的位置 |
public int indexOf(String str,int fromIndex) | 从fromIndex开始查找指定字符位置 |
public synchronized StringBuffer reverse() | 进行反转 |
public synchronized String toString() | 转为String |