【自学笔记】 Java基础 - API之StringBuilder
#StringBuilder## 概述
- Java.lang.StringBuilder
- StringBuilder是一个可变的字符串类,可以看做是字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变换的字符串),底层也是一个数组,但是没有被final修饰,可以改变长度
- StringBuilder在内存中始终是一个数组,占用空间少,效率高,如果超出了StringBuilder的容量,会自动扩容。
## 与String的性能对比
```Java
public class testStringBuilder {
public static void main(String[] args) {
testString();
testStringBuilder();
}
public static void testString(){
String s = "";
long start = System.currentTimeMillis(); // 获取1970年1月1日0时0分0秒 到当前时间经历过的的毫秒值
for (int i=1;i<=50000;i++){
s +=i;
}
long end = System.currentTimeMillis();
System.out.println("String=>" + " " + (end-start));
}
public static void testStringBuilder(){
StringBuilder stringBuilder = new StringBuilder();
long start = System.currentTimeMillis(); // 获取1970年1月1日0时0分0秒 到当前时间经历过的的毫秒值
for (int i=1;i<=50000;i++){
stringBuilder.append(i);
}
long end = System.currentTimeMillis();
System.out.println("StringBuilder=>" + " " + (end-start));
}
}
打印结果:
String=> 3780
StringBuilder=> 2
```
注:+号运算符 对字符串拼接时候会产生垃圾字符串 导致内存变大,再Java底层中会new StringBuilder调用append()完成字符串拼接,再调用toString()方法返回字符串,一个加号,堆内存中俩个对象。
## 构造方法
- StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为16个字符。
- StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容
```Java
public class CreateStringBuilder {
public static void main(String[] args) {
// StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为16个字符。
StringBuilder stringBuilder = new StringBuilder();
System.out.println(stringBuilder);
// StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容
StringBuilder stringBuilder1 = new StringBuilder("abc");
System.out.println(stringBuilder1);
}
}
```
## 常用方法
- public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身;
注:
append方法返回的是this。
append的方法无序返回值。
- public String toString():将当前StringBuilder对象转换为String对象
注:
String和StringBuilder可以互相转换:
String->StringBuilder:可以使用StringBuilder的构造方法
StringBuilder->String:可以使用StringBuilder中的toString方法
- public StringBuilder reverse() 返回相反的字符序列
- public int length() 返回长度(字符出现的个数)
```Java
public class StringBuilderMethod {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
// public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身;
stringBuilder.append(123);
stringBuilder.append("abc");
stringBuilder.append(true);
StringBuilder stringBuilder1 = stringBuilder.append('s');
StringBuilder stringBuilder2 = stringBuilder.append(12314.123);
System.out.println(stringBuilder);
System.out.println(stringBuilder1 == stringBuilder2); // 返回当前对象自身
// 链式编程:如果一个方法返回得是一个对象,对象就可以继续向下调用方法
stringBuilder2.append("连").append("式").append("编").append("程");
System.out.println(stringBuilder);
// result=> 123abctrues12314.123
// result=> true
// 123abctrues12314.123连式编程
// public StringBuilder reverse() 返回相反的字符序列
stringBuilder.reverse();
System.out.println(stringBuilder);
// 程编式连321.41321seurtcba321
//public int length() 返回长度(字符出现的个数)
System.out.println(stringBuilder.length());
// public String toString():将当前StringBuilder对象转换为String对象
System.out.println(stringBuilder.toString());
}
}
```
## StringBuilder和String得区别
- String:内容是不可改变的
- StringBuilder:内容是可变的 First丶云心 发表于 2021-7-11 17:25
谢谢分享,学习学习!
{:301_978:} 共同加油 我怎么又感觉到我到了java的学习时代了? chenlongjs 发表于 2021-7-11 19:16
我怎么又感觉到我到了java的学习时代了?
{:301_1001:}那就多看看,帮我查查错,顺便复习复习 xuexi l
咋没讲讲 线程安全呢? Derrick92 发表于 2021-7-12 08:04
咋没讲讲 线程安全呢?
线程安全我打算等到StringBuffer的时候一起说{:301_1007:}
页:
[1]