String 是一个字符串常量,一旦赋值,其值不能更改;
StringBuffer与StringBuilder是可以改变长度的字符序列.也称缓冲池
当为String变量赋值一个字符串常量时,首先在常量池中寻找是否有存在此变量,如果存在,将其地址赋值给变量;如果不存在,在常量池中开辟一个空间,将字符串常量复制进去,将其地址赋值于变量;而常量的地址值是不能再改变的,只能等没有变量指向它时,被垃圾回收器回收.
StringBuilder与StringBuffer不同的地方是StringBuffer在多线程中是安全的;String也是安全的.
StringBuffer相比StringBuilder效率较低,;StringBuilder在多线程中不安全,但是效率高;所以在单线程中使用StringBuilder提高效率;
另外在字符串需要经常变换的程序中,String的效率远远小于StringBuffer和StringBuilder.
引用类型作为形参传递时,其值的改变会影响实参的改变,但是String最为特殊,不会影响实际参数的改变.
StringBuffer和StringBuilder的很多方法中的返回值实际上就是其本身,也就是说我们在调用StringBuffer和StringBuilder的一些方法时,发生改变的实际上就是调用方法的对象.
StringBuffer,数组与集合都是JAVA中的容器,用来存储数据.
数组的长度是固定的,无法改变,但是StringBuffer与集合的长度都是可以更改的.
StringBuffer只能存储字符序列,数组可以存放基本类型和引用类型,而集合只能存放引用类型
同一个集合可以存放各种数据类型的数据,但是同一个数组只能存放同种数据类型,而StringBuffer只能存放字符序列.
构造方法:
public String()
public String(String original)
public String(char[] value)
public String(char[] value, int offset, int count)
public String(StringBuffer buffer)
public String(StringBuilder builder)
构造方法中很多实际上就是将其他的数据类型转化为字符串类型;当我们需要一个字符串时,最常用的往往是:String s=“字符串”;
方法 | 摘要 |
---|---|
- public boolean equals(Object anObject) | 重写 equals方法,判断其地址值的内容是否相等; |
- public boolean equalsIgnoreCase(String anotherString) | 判断两个字符串是否相等;忽略大小写比较; |
- public boolean startsWith(String prefix) | 判断此字符串是否以指定的前缀开始。 |
public boolean endsWith(String suffix) | 判断此字符串是否以指定的后缀结束。 |
public boolean isEmpty() | 字符串非空判断,当且仅当 length() 为 0 时返回 true。 |
方法 | 摘要 |
---|---|
- public int length(); length() | 获取当前字符串的长度; |
- public char charAt(int index) | 获取字符串中索引为index的字符 |
- public int indexOf(int ch) | 返回指定字符在此字符串中第一次出现处的索引; |
- public String[] split(String regex) | 将一个字符串按照String regex处分割开,返回一个数组; |
方法 | 摘要 |
---|---|
public String substring(int a) | 截取字符串,截取范围是[a,末尾) |
public String substring(int a,int b) | 截取字符串,截取范围是[a,b) |
方法 | 摘要 |
---|---|
public byte[] getBytes() | 将字符串转化为一个Byte类型的数组,值为ASCLL码的值 |
public char[] toCharArray() | 将此字符串转换为一个新的字符数组 |
public String toUpperCase() | 将字符串的所有字符转化为大写 |
public String toLowerCase() | 将其字符串的所有字符转化为小写 |
public static String valueOf(char c) | 将各种类型转化为字符串; |
方法 | 摘要 |
---|---|
public byte[] getBytes() | 将字符串转化为一个Byte类型的数组,值为ASCLL码的值 |
- public String trim() | 返回字符串的副本,忽略前导空白和尾部空白; |
- public String replace(char oldChar,char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
- public String replace(CharSequence target, CharSequence replacement) | 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。该替换从字符串的开头朝末尾执行,例如,用 “b” 替换字符串 “aaa” 中的 “aa” 将生成 “ba” 而不是 “ab”。 |
- public int compareTo(String anotherString) | 按字典顺序比较两个字符串; |
compareTo()是按照字符串的索引,从头比较两个字符串的每一个字符,如果其不相等,则马上结束比较返回不相等的字符的ASCLL码值的差;如果相等,则继续比较,直到有一个字符串已经没有字符可比时,返回两个字符串的长度差;为s1.length()-s2.length()
方法 | 摘要 |
---|---|
public StringBuffer() | 默认缓冲区大小,初始容量16个字符(默认缓冲区大小足够!) |
public StringBuffer(int capacity) | 指定固定大小的初始容量,构造一个字符串缓冲区 |
public StringBuffer(String str) | 构造一个缓冲区大小,容量大小等于字符串长度+初始容量16 |
方法 | 摘要 |
---|---|
public int capacity() | 获取字符串缓冲区的容量大小 |
public int length() | 获取字符串缓冲区中的字符串长度 |
方法 | 摘要 |
---|---|
public StringBuffer append(boolean /int/String…) | 追加到末尾(末尾追加),可以追加任何数据,返回本身 |
public StringBuffer insert(int offset,String str) | 删除从指定位置开始到指定位置结束的字符[start,end)处,返回本身 |
方法 | 摘要 |
---|---|
public StringBuffer deleteCharAt(int index) | 删除指定索引处的字符,返回本身 |
public StringBuffer delete(int start, int end) | 删除从指定位置开始到指定位置结束的字符[start,end)处,返回本身 |
方法 | 摘要 |
---|---|
public StringBuffer replace(int start ,int end, String str) | 从指定位置开始到指定位置结束(end-1处)位置的字符使用新的str字符串替换掉,返回本身 |
public StringBuffer reverse() | 将字符串缓冲区的字符串进行反转,返回本身 |
方法 | 摘要 |
---|---|
public String substring(int a) | 截取字符串,截取范围是[a,末尾) |
public String substring(int a,int b) | 截取字符串,截取范围是[a,b) |