StringBuilder
StringBuilder是一种可存储字符串的可变长度容器,解决了String存储字符串的不可变性,其也提供了很多操作字符串的便捷方法。另外,StringBuilder作为存储共享变量时,需要注意线程安全问题,因为它是非线程安全的,若存在线程安全问题,可选用StringBuffer替代。更多内容详见公众hao:云水致诚
1、诞生原因
A、方便字符串相关处理,如:拼接、反转、插入、替换等;
B、JDK5开始,优化String使用+拼接多个字符串操作;
C、循环中字符串的拼接,优化String使用+拼接字符串操作;
D、可变长的字符串容器,解决了String的不可变性;
2、有哪些特点
A、非线程安全:不能作为共享变量使用,因为是非线程安全的,可使用StringBuffer替代;
B、字符数据:存储的字符串与String类似,均被转为char数组形式存储,JDK9开始,存储的字符串被转为字节数组存放,这点与String类似;
C、可存储任何类型,但最终都会被转为字符串,如:整形、字符、浮点、布尔、字节等;
D、是一种可存储任何类型的可变字符序列;
E、最大可存储长度为2的31次幂减9,即Integer.MAX_VALUE - 8;
3、与String的关系
顾名思义,与String相同,StringBuilder也是用来处理字符串的引用类,它也提供了很多便捷操作字符串的方法。同时,StringBuilder通过append方法拼接字符串,拼接多个字符串时,只需要一个StringBuilder对象即可,而String主要是通过+号拼接,在JDK5之前,每次+号拼接后都会生成一份新的String对象,比较耗费内存资源,JDK5之后,每次+号拼接后底层自动创建StringBuilder对象,以节省内存耗费。另外,String是固定不变的,而StringBuilder则是一种可存储任何类型的可变容器。
4、常见的操作
A、拼接字符串
StringBuilder sb = new StringBuilder(16);
sb.append("hell");
sb.append("o"); // hello
B、插入字符串
StringBuilder sb = new StringBuilder("hell");
sb.insert(4, "o-insert"); // hello-insert
C、反转字符串
StringBuilder sb = new StringBuilder("hello");
sb.reverse(); // olleh
D、替换字符串
StringBuilder sb = new StringBuilder("hello");
sb.replace(1,2,"o"); // hollo
E、删除字符串
StringBuilder sb = new StringBuilder("hello");
sb.delete(1,2); // hllo
StringBuilder sb = new StringBuilder("hello");
sb.deleteCharAt(1); // hllo
F、长度及转为字符串
StringBuilder sb = new StringBuilder("hello");
System.out.println(sb.length()); // 5
System.out.println(sb.toString()); // hello
5、什么场景使用
A、循环中拼接字符串时,替代String拼接;
B、JDK5以前,替代String拼接多个字符串,比如:超过4个串拼接等;
C、便捷字符串拼接、反转、插入、替换及链式样调用等;
6、常见面试问题
A、StringBuilder是线程安全的吗?原因是什么?
B、循环中如何使用StringBuilder拼接字符串呢?
C、StringBuilder拼接的字符串是如何存储的呢?
D、StringBuilder能够无限存储字符串吗?
StringBuilder
StringBuilder是一种可存储字符串的可变长度容器,解决了String存储字符串的不可变性,其也提供了很多操作字符串的便捷方法。另外,StringBuilder作为存储共享变量时,需要注意线程安全问题,因为它是非线程安全的,若存在线程安全问题,可选用StringBuffer替代。更多内容详见公众hao:云水致诚
1、诞生原因
A、方便字符串相关处理,如:拼接、反转、插入、替换等;
B、JDK5开始,优化String使用+拼接多个字符串操作;
C、循环中字符串的拼接,优化String使用+拼接字符串操作;
D、可变长的字符串容器,解决了String的不可变性;
2、有哪些特点
A、非线程安全:不能作为共享变量使用,因为是非线程安全的,可使用StringBuffer替代;
B、字符数据:存储的字符串与String类似,均被转为char数组形式存储,JDK9开始,存储的字符串被转为字节数组存放,这点与String类似;
C、可存储任何类型,但最终都会被转为字符串,如:整形、字符、浮点、布尔、字节等;
D、是一种可存储任何类型的可变字符序列;
E、最大可存储长度为2的31次幂减9,即Integer.MAX_VALUE - 8;
3、与String的关系
顾名思义,与String相同,StringBuilder也是用来处理字符串的引用类,它也提供了很多便捷操作字符串的方法。同时,StringBuilder通过append方法拼接字符串,拼接多个字符串时,只需要一个StringBuilder对象即可,而String主要是通过+号拼接,在JDK5之前,每次+号拼接后都会生成一份新的String对象,比较耗费内存资源,JDK5之后,每次+号拼接后底层自动创建StringBuilder对象,以节省内存耗费。另外,String是固定不变的,而StringBuilder则是一种可存储任何类型的可变容器。
4、常见的操作
A、拼接字符串
StringBuilder sb = new StringBuilder(16);
sb.append("hell");
sb.append("o"); // hello
B、插入字符串
StringBuilder sb = new StringBuilder("hell");
sb.insert(4, "o-insert"); // hello-insert
C、反转字符串
StringBuilder sb = new StringBuilder("hello");
sb.reverse(); // olleh
D、替换字符串
StringBuilder sb = new StringBuilder("hello");
sb.replace(1,2,"o"); // hollo
E、删除字符串
StringBuilder sb = new StringBuilder("hello");
sb.delete(1,2); // hllo
StringBuilder sb = new StringBuilder("hello");
sb.deleteCharAt(1); // hllo
F、长度及转为字符串
StringBuilder sb = new StringBuilder("hello");
System.out.println(sb.length()); // 5
System.out.println(sb.toString()); // hello
5、什么场景使用
A、循环中拼接字符串时,替代String拼接;
B、JDK5以前,替代String拼接多个字符串,比如:超过4个串拼接等;
C、便捷字符串拼接、反转、插入、替换及链式样调用等;
6、常见面试问题
A、StringBuilder是线程安全的吗?原因是什么?
B、循环中如何使用StringBuilder拼接字符串呢?
C、StringBuilder拼接的字符串是如何存储的呢?
D、StringBuilder能够无限存储字符串吗?