常用类04/String、 StringBuffer、StringBuilder⭐
String、 StringBuffer、StringBuilder三者的异同?
不同:
- String:不可变的字符序列;
- StringBuffer:可变的字符序列;线程安全的,效率低;
- stringBuilder:可变的字符序列; jdk5.0新增的,线程不安全的,效率高;
相同:
底层都是使用char[]存储可变小例子
package com.cyl;
import org.junit.Test;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class StringMethodTest {
@Test
public void test() {
StringBuffer sb1 = new StringBuffer("abc");
sb1.setCharAt(0,'m');
System.out.println(sb1);
}
}
答案
源码分析:
String str = new String(); / / char[] value = new char[0];
string str1 = new String(“abc” ); / / char[] value = new char[]{ ‘a’ , ’ b ’ , ’ c ’ };StringBuffer sb1 = new StringBuffer(); / / char[] value = new char[16];
底层创建了一个长度是16的数组。
sb1.append( ‘a’ ); / / value[0] = ‘a ’ ;
sb1.append( ’ b ’ ); / / value[1] = ‘b ’ ;stringBuffer sb2 = new StringBuffer( “abc” ); / / char[] value = new char[ “ abc “.Length() + 16]
问题1: System.out.printLn(sb2.Length()); / / 3
问题2: 扩容问题 : 如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。
默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中。指导意义 : 开发中建议大家使用:StringBuffer(int capacity)或 StringBuilder)(int capacity)
StringBuffer类的常用方法
举例
package com.cyl;
import org.junit.Test;
import java.io.UnsupportedEncodingException;
public class StringMethodTest {
@Test
public void test() {
StringBuffer s1 = new StringBuffer("abcdefg");
//删除
s1.delete(2,4);//删除2位和4位
System.out.println(s1);
//添加
s1.append(1);
s1.append('1');
System.out.println(s1);
//替换
s1.replace(2,4,"xxxx");替换了2-3位
System.out.println(s1);
//插入
s1.insert(2,false);//这里选的是boolean
System.out.println(s1);
System.out.println(s1.length());
//反转
s1.reverse();
System.out.println(s1);
}
}
结果
补充:
总结:
主要记住一下几点:
增: append(xxx)
删: deLete(int start,int end)
改: setCharAt(int n ,char ch) / replace(int start, int end,string str)查: charAt(int n )
插: insert(int offset,xxx)
长度:Length();
*遍历: for() + charAt() / tostring()原视频讲解三者效率对比
原视频讲解String类的总结与区分
还没有评论,来说两句吧...