常用类04/String、 StringBuffer、StringBuilder⭐

Dear 丶 2023-10-04 16:43 98阅读 0赞

String、 StringBuffer、StringBuilder三者的异同?
不同:

  1. String:不可变的字符序列;
  2. StringBuffer:可变的字符序列;线程安全的,效率低;
  3. stringBuilder:可变的字符序列; jdk5.0新增的,线程不安全的,效率高;

相同:
底层都是使用char[]存储

可变小例子

  1. package com.cyl;
  2. import org.junit.Test;
  3. import java.io.UnsupportedEncodingException;
  4. import java.util.Arrays;
  5. public class StringMethodTest {
  6. @Test
  7. public void test() {
  8. StringBuffer sb1 = new StringBuffer("abc");
  9. sb1.setCharAt(0,'m');
  10. System.out.println(sb1);
  11. }
  12. }

答案

在这里插入图片描述

源码分析:
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类的常用方法

在这里插入图片描述
在这里插入图片描述

举例

  1. package com.cyl;
  2. import org.junit.Test;
  3. import java.io.UnsupportedEncodingException;
  4. public class StringMethodTest {
  5. @Test
  6. public void test() {
  7. StringBuffer s1 = new StringBuffer("abcdefg");
  8. //删除
  9. s1.delete(2,4);//删除2位和4位
  10. System.out.println(s1);
  11. //添加
  12. s1.append(1);
  13. s1.append('1');
  14. System.out.println(s1);
  15. //替换
  16. s1.replace(2,4,"xxxx");替换了2-3
  17. System.out.println(s1);
  18. //插入
  19. s1.insert(2,false);//这里选的是boolean
  20. System.out.println(s1);
  21. System.out.println(s1.length());
  22. //反转
  23. s1.reverse();
  24. System.out.println(s1);
  25. }
  26. }

结果

在这里插入图片描述


补充:
在这里插入图片描述

总结:
主要记住一下几点:
增: 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类的总结与区分

发表评论

表情:
评论列表 (有 0 条评论,98人围观)

还没有评论,来说两句吧...

相关阅读

    相关 String

    一、String类 String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不