首页 > 其他分享 >String类、StringBuffer类、StringBuilder类

String类、StringBuffer类、StringBuilder类

时间:2022-10-20 23:15:20浏览次数:61  
标签:字符 String StringBuffer StringBuilder 字符串 new

String类、StringBuffer类、StringBuilder类

String类的创建

// 方式一  直接赋值
String s = "woshihaoren";
// 方式二  构造器创建
String ss = new String("woshihaoren");

// 方式一创建会先从常量池寻找。找到,直接指向;找不到,则重新创建。  s最终指向常量池的空间地址。
// 方式二创建会先在堆中创建空间,里面维护有value[]属性,并指向常量池的"woshihaoren"。如果常量池没有"woshihaoren",则重新创建,如果有直接通过value指向。          ss最终指向堆中的空间地址。

注:String类 是 final 类,不能被其他的类继承。
方式二创建的String类,有属性 private final char value[]; 用于存放字符串内容。
value 是一个 final 类型, 不可以修改:即 value 不能指向新的地址,但是单个字符内容是可以变化。

String类的方法

equals(): 是Object类中的方法,只能判断引用类型,默认判断的是地址是否相等。子类中(String类、包类等)往往重写改方法,用于判断内容是否相等。(区分大小写,判断内容是否相等)
注:
即 Object 的 equals 方法默认就是比较对象地址是否相同,也就是判断两个对象是不是同一个对象。
源码中 String 类、包类(Integer)等子类重写了 Object 的 equals 方法,变成了比较两个字符串值是否相同。
(String类比较过程:判断类型==>向下转型==>如果长度相同==>然后一个一个的比较字符==>如果两个字符串的所有字符都相等,返回true)

equalslongreCase(): 不区分大小写,判断内容是否相等。

length: 获取字符的个数,字符串的长度。

indexOf(): 获取字符在字符串中第一次出现的索引,找不到,返回-1。

lastIndexOf():获取字符在字符串中最后一次出现的索引,找不到,返回-1。

subString(): 截取指定范围的字符。

trim(): 去除前后空格。

charAt(): 获取某处索引的字符。  // str[index] 是错的

intern(): 最终返回的是常量池的地址(对象)。

toUpperCase(): 转大写。

toLowerCase(): 转小写。

cacat(): 连接。

replace(): 替换字符串的字符。

split(): 分割字符串。

compareTo(): 比较两个字符串的大小。

toCharArray(): 转为字符数组。

format(): 格式化字符串。 %s字符串 %c字符 %d整型 %2.f浮点型。

StringBuffer类

// 创建
StringBuffer stringBuffer = new StringBuffer("hello")

//StringBuffer 是一个 final 类,不能被继承
// 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)
// 不用每次都更换地址(即不是每次创建新对象), 所以效率高于 String类

String 和 StringBuffer 相互转换

// String ==> StringBuffer
String str = "hello";

// 方式 1 使用构造器
StringBuffer stringBuffer = new StringBuffer(str);
// 方式 2 使用的是 append 方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);

// StringBuffer ==> String
StringBuffer stringBuffer3 = new StringBuffer(str);

//方式 1 使用 StringBuffer 提供的 toString 方法
String s = stringBuffer3.toString();
//方式 2: 使用构造器来搞定
String s1 = new String(stringBuffer3);

StringBuffer 类常见方法

StringBuffer s = new StringBuffer("hello")

// 增
s.append("赵敏").append(100).append(true).append(10.5);
System.out.println(s); // "hello赵敏100true10.5"

// 删
// 删除索引为 >=start && <end 处的字符  [a,b)
s.delete(11, 14);
System.out.println(s);//"hello赵敏10010.5"

// 改
// 使用 c 替换 索引 a和b之间 的字符 [a, b, c)
s.replace(6, 8, "周芷若");
System.out.println(s);//"hello周芷若true10.5"

// 插
// 在索引为 a 的位置插入 b,原来索引为 a 的内容自动后移  (a,b)
s.insert(6, "赵敏");
System.out.println(s);//"hello赵敏周芷若 true10.5"

StringBuilder类

// 创建
StringBuilder stringBuilder = new StringBuilder("hello")

//StringBuffer 是一个 final 类,不能被继承
// 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)
// 不用每次都更换地址(即不是每次创建新对象), 所以效率高于 String类。
// 适用于单线程中(StringBuilder不是线程安全)。
// StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用。

StringBuilder 类常见方法同[SringBuffer]

String、StringBuffer 和 StringBuilder 的比较

// StringBuffer和StringBuilder非常类似,均代表可变的字符序列,而且方法也一样
1、String: 不可变字符序列,效率低,但是复用率高。
2、StringBuffer: 可变字符序列、效率较高(增删)、线程安全。
3、StringBuilder: 可变字符序列、效率最高、线程不安全。

注意:
string s = "a"; // 创建一个字符串
s += "b" // s会丢弃了原来的"a"字符串,去产生新的字符串"ab"。会造成大量字符串对象留存内存中,降低效率。
结论:如果对字符串做大量修改,不要使用string类。

String Vs StringBuffer Vs StringBuilder 效率 : StringBuilder > StringBuffer > String
使用结论:
1、如果字符串存在大量的修改操作,一般使用StringBuffer和StringBuilder。
2、如果字符串存在大量的修改操作,并在单线程中的情况下,使用StringBuilder。
3、如果字符串存在大量的修改操作,并在多线程中的情况下,使用StringBuffer。
4、如果字符串很少修改,被多个对象引用,使用String,比如配置信息等。

标签:字符,String,StringBuffer,StringBuilder,字符串,new
From: https://www.cnblogs.com/wh-bky/p/16811704.html

相关文章