构造方法
通过字符数组构造,结果abc
通过字节数组构造,结果abc
//把字符串转化为字节数组
当前代码编译环境为UTF-8,出现异常时,直接抛出异常即可。main+throws UnsupportedEncodingException
编译环境为UTF-8,但是运用gb2312这个编译环境重新编译,就出现了乱码,如图示。
常用方法
获取相关的办法
前闭后开【)
判断相关的方法
转换相关的方法
分割相关的方法
public String[] split(String regex) :将此字符串按照给定的 regex(规则)拆分为字符串数组。
public static void main(String[] args) {
// 创建字符串对象
String s = "aa,bb,cc";
String[] strArray = s.split(","); // ["aa","bb","cc"]
for (int x = 0; x < strArray.length; x++) {
System.out.println(strArray[x]); // aa bb cc
}
}
StringBuffer
StringBuffer 对象则代表一个字符序列可变的字符串,当一个 StringBuffer 被创建以后,通过 StringBuffer 提 供的 append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦 通过 StringBuffer 生成了最终想要的字符串,就可以调用它的 toString()方法将其转换为一个 String 对象。
构造方法
StringBuffer() : 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
StringBuffer(String str) : 构造一个字符串生成器,它包含与指定的 str 相同的字符。该字符串生成器的初始容 量为 16 加上字符串参数的长度。
StringBuffer(int capacity) : 构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。
获取相关的方法
public char charAt(int index) : 返回此序列中指定索引处的 char 值。
pubic int indexOf(String str) : 返回第一次出现的指定子字符串在该字符串中的索引。
public int indexOf(String str, int fromIndex) : 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
public int length() : 返回长度(字符数)。
public String toString() : 返回此序列中数据的字符串表示形式。
public String substring(int start) : 返回一个新的 String,它包含此字符序列当前所包含字符的子序列。
public String substring(int start, int end) : 返回一个新的 String,它包含此序列当前所包含字符的子序列。 charAt、indexOf、lastIndexOf、length、subString 方法与 String 类用法一致,不再演示。
修改相关的方法
public StringBuilder append(xxx xx) : 追加 xx 字符串。
public StringBuilder delete(int start, int end) : 移除start到end位置的字符。
public StringBilder deleteCharAt(int index) : 移除指定位置上的 char。
public StringBuilder insert(int offset, xxx xx) : 在某个位置插入 xx 字符串。
public StringBuilder replace(int start, int end, String str) : 使用str替换字符串中 start 到 end 位置的字符串。
public StringBuilder reverse() : 反转字符串。
public void setCharAt(int index, char ch) : 将给定索引处的字符设置为 ch。
public void setLength(int newLength) : 设置长度。字符串长度不足newLength 用空格补充,超过了截取到 newLength。
为什么需要StringBuffer?
String 在内部维护了一不可变字符数组,是静态字符串。拼接性能特别差。
StringBuffer 在内部维护一可变长度字符数组,通过一定的算法实习字符串的动态增加。所以可以成为动态字符串。
性能测试
进行字符的累加,从而统计出字符串追加和StringBuffer 追加的区别。
StringBuilder
StringBuffer 是线程安全的,可以在高并发的场景下使用。StringBuilder 是线程不安全,在高并发的场景可能发生,数据丢失(数据覆盖)。数组越界(由于添加元素触发数组扩容,导致数组越界)。
线程安全
在append方法中加入synchronized加锁,原子性操作
ej:
public synchronized void append(String s){
}
越界问题
性能测试
将StringBuffer中性能测试的代码加上StringBuilder(单线程,多线程是不安全的) 的测试。
总结
简述 String、StringBuilder、StringBuffer 的区别
-
String是静态字符串,内部维护一不可变字符数组。StringBuilder和StringBuffer是动态字符串,内部维护一可变字符数组。
-
StringBuilder、StringBuffer 的 操作字符串的性能要远优于 String。String只适用于少量的字符串操作的情况。文章来源:https://www.toymoban.com/news/detail-851465.html
-
StringBuffer 是线程安全的,StringBuilder是线程不安全的。StringBuilder 的性能要优于 StringBuffer。文章来源地址https://www.toymoban.com/news/detail-851465.html
到了这里,关于Java String、StringBuffer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!