文章目录
- 前言
- StringBuilder
- 我们先直接new 个 StringBuilder,看个效果
- 既然发现直接使用,没有现象,那么我们就来传参。
- 第一种 直接传参
- 第二种,通过append方法去添加
- 附图
- 这是我们再 append 一个字符串时,会发生怎么的效果
- append 可以连用。
- 拓展
- 回顾前面在讲 字符串常量池的时候,有两个字符串拼接,拼接好的字符串引用类型就是StringBuilder类型。不入池。
- 代码示例(模仿当时情景):
- 效果图
- 附图
- 虽然我们前面说: StringBuilder 和 StringBuffer 几乎一样,但 是 几乎,而不是完全,所以还是会存在着些许不同的地方,接下来,我们就来讲一下 StringBuilder 和 StringBuffer的区别。
- 小知识点:
- 把字符串转变成StringBuilder类型/StringBuffer类型,必须调用对应的构造方法
- StringBuilder类型/StringBuffer类型 转变成 String类型,调用 toString 方法
- 文章的最后,以面试的问题结束
- 面试题:请解释String、StringBuffer、StringBuilder的区别
前言
StringBuffer 、 StringBuilder、 String 是三种数据类型
首先来回顾下String类的特点:
任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指
向而已。
通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和
StringBuilder类。
再来说 StringBuffer 和 StringBuilder ,从内部的方法上来说:大同小异,基本一致。
StringBuilder
我们先直接new 个 StringBuilder,看个效果
既然发现直接使用,没有现象,那么我们就来传参。
第一种 直接传参
疑问由此而生,sb 是一个引用,存储的地址,那么它怎么 就可以打印"abcdef"呢?
这是因为 sout(System.out,println) 调用的是 sb 引用类型的 toString。
那么我们 Ctrl+左键,进入 StringBuilder 类型中
那么我们就可以这么去写,因为它的返回值本身就是 String
第二种,通过append方法去添加
附图
#ensp;
这是我们再 append 一个字符串时,会发生怎么的效果
append 可以连用。
语法: append().append();
拓展
回顾前面在讲 字符串常量池的时候,有两个字符串拼接,拼接好的字符串引用类型就是StringBuilder类型。不入池。
代码示例(模仿当时情景):
public class Test {
public static void main(String[] args) {
String str = "abcdef";
str+="123";
System.out.println(str);
}
}
效果图
附图
由此得出局部结论:在循环拼接字符串的时候,使用 StringBuilder / StringBuffer ,效率要比String更高。(最后我们在对其优化一波)
虽然我们前面说: StringBuilder 和 StringBuffer 几乎一样,但 是 几乎,而不是完全,所以还是会存在着些许不同的地方,接下来,我们就来讲一下 StringBuilder 和 StringBuffer的区别。
由此得知,StringBuilder 和 StringBuffer 的功能都差不多,大部分功能都相同,
但是 有些功能,虽然名称是一样的,但是功能上的实现,却存在着细微的区别。
比如:append
小知识点:
把字符串转变成StringBuilder类型/StringBuffer类型,必须调用对应的构造方法
StringBuilder类型/StringBuffer类型 转变成 String类型,调用 toString 方法
文章的最后,以面试的问题结束
面试题:请解释String、StringBuffer、StringBuilder的区别
String 的内容不可修改,StringBuffer 与 StringBuilder的内容可以修改
StringBuffer 与 StringBuilder 大部分功能是相似的
StringBuffer 采用同步处理(synchronized),属于线程安全操作;而 StringBuilder 未采用同步处理(synchronized),属于线程不安全操作