字符串拼接问题:

String类的对象内容不可改变:字符串的底层是一个被final修饰的数组,不能改变,是一个常量

所以每当进行字符串拼接时,总是会在内存中创建一个新的对象

进行字符串的相加,内存中就会有多个字符串,占用空间多,效率低下

【java笔记】StringBuilder类_bc

例:

String s="hello";
s+="world";
System.out.println(s);
  • 1.
  • 2.
  • 3.

总共创建了三个字符串,“hello”, "world" "hello world"

引用变量s首先指向"Hello”,最终指向"helloworld"

StringBuilder类:

字符串缓存区,可以提供字符串的操作效率(看成一个长度可以变化的字符串)

底层是一个没有被final修饰的数组

【java笔记】StringBuilder类_java_02

允许采用多线程的方式添加或删除字符。

如果所有 字符串编辑操作都是在单个线程中执行,则应该使用StringBuilder类。

 stringBuilder的构造方法:

public StringBuilder():                    构造一个空的StringBuilder容器

StringBuilder bu1=new StringBuilder();
  • 1.

public StringBuilder(String str):     构造一个StringBuilder容器,并将字符串添加进去

StringBuilder bu2=new StringBuilder("abc");
  • 1.
StringBuilder类常用成员方法

public StringBuilder append(..):添加任意类型数据的字符串形式,并返回当前对象自身

StringBuilder bu1=new StringBuilder();
StringBuilder bu2=bu1.append("abc");
//bu1:abc
//bu2:abc
bu1与bu2地址值相同
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

 还可以写成

bu1.append("abc");
bu1.append(1);
bu1.append(1.1);
  • 1.
  • 2.
  • 3.

 还可以写成:

bu1.append("abc").append(1).append(1.1);
  • 1.

 链式编程:方法返回值是一个对象,可以根据对象继续调用方法

tostring方法:

public String toString():将当前StrnigBuilder对象转换为String对象

StringBuilder和String可以相互转换

         String->StringBuilder(String str):使用StringBuilder的构造方法

         StringBuilder->String:                可以使用StringBuilder中的tostring转换为String对

总结:

【java笔记】StringBuilder类_java_03

int length():返回构建器或缓冲器中代码单元数量
StringBuilder delete(int startIndex,int endIndex):删除偏移量从startIndex到endIndex-1的代码单元并返回this