Java中Srting,StringBuffer,StringBuilder三者的区别
前言:
字符串是我们在Java开发中最常见用的一种数据,它用包装类String表示,
string
是不可修改的,
stringBuffer
是可修改的,安全高,但是效率低,而
stringBuilder
则是可修改的,安全低,效率高。
一、Srting
1.1 定义
String是不可变的字符串,String类表示:public final
class String
因此,String 存储的字符串存储在 char数组中: value[ ], 这个数组使用final修饰, value的数组无法改变, String也就是一个不可变的字符串:
例如: String str = “abc”;
str = “abc”+ “d”;
“abc” 这个字符串是不可变的, str只是"abc"字符串对象的引用, str可变, str=“abc”;
str指向的"abc"对象的空间, str=“abc”+“d”; 产生三块空间, “abc”,“d”,“abcd”. str
指向的"abcd"空间
1.2 创建字符串
1.通过new 关键字, 构造方法
2.直接赋值,
推荐
String 变量=字符串常量对象;
字符串常量对象: “内容”,不仅仅是字符串值,而且还是一个字符串对象
1.3 字符串常量池String pool
只存储字符串常量,双引号引起的存在字符串常量池;
特征:字符串唯一的
在jdk1.7之后,字符串常量池是位于堆中
存放一个字符串:
从字符串常量池中查找是否存在该字符串空间
如果有, 直接返回找到的字符串常量池中的对象, 共享的
如果没有, 在字符串常量池创建这个对象
二、StringBuffer
2.1 构造方法
2.2 常用方法
2.2.1 追加: 可以追加任意的数据类型
2.2.2 插入: 在指定下标插入内容
2.2.3 刪除:
2.2.4 替换:
2.2.5 反转:
2.2.6 修改指定位置字符:
2.2.7 把StringBuffer转换为String:
三、StringBuilder
3.1 常用方法
3.1.1 附加序列:
3.1.2 转换为char
其实,StringBuffer和StringBuilder的常用方法是差不多的。
四、区别
字符串类:
String: 不可变的字符串, 频繁进行+操作, 在堆中创建String对象, 效率比较低, 频繁修改这个字符串,第一个String不提供相关的方法, 原因: String是一个不可变的字符串, 效率低;
对字符串进行频繁修改操作,jdk提供了StringBuilder/StringBuffer: 可变的字符串
StringBuffer与StringBuilder的区别:
StringBuffer是一个线程安全的, 所有的方法添加了synchronized关键字, 同步方法, 效率低
StringBuilder是一个线程不安全的, 所有方法都是非同步方法, 效率高