StringBuffer和StringBuillder和String类
字符串缓冲区。StringBuffer:
特点:
1,缓冲区就是用来缓存数据,意味着它是一个容器。
2,该容器的长度是可变的。
3,提供了对容器中内容的操作的方法(最多无外乎四种:增删改查);
4, 该缓冲区中可以添加多种类型的元素,基本元素类型和引用类型。
5,无论怎么样改变容器中的数据,最终要使用结果,还是必须将其转成字符串,使用toString方法。
public class StringBufferDemo {
publicstatic void main(String[] args) {
//创建一个字符串缓冲区。
StringBuffer sb = newStringBuffer("abers");
//使用其添加方法,往缓冲区中加入元素。
// StringBuffer s1 =sb.append(88);
// System.out.println(sb);
// sb.append(88).append(true).append("abc");//连续添加,调用动作,方法调用链
// System.out.println(sb.toString());
// Stringstr = "abc"+4+'c';
// str= newStringBuffer().append("abc").append(4).append('c').toString();
//想要在任意位置添加怎么办呢?insert方法
// sb.insert(1,"nba");
// System.out.println(sb);
//删除的方法
// sb.delete(0, sb.length());//清空缓冲区
// System.out.println(sb);
//修改一段
// sb.replace(1, 3,"ak47");
// System.out.println(sb);
//查询。 indexof()
System.out.println(sb.reverse());
}
}
-----------------------------------------------------------------------------------
StringBuilder含义:
JDK1.5版本出现了一个新的字符缓冲区,
功能和StrigBuffer一模一样
到底区别在那呢?
StringBuffer是线程安全的。
StringBuilder是线程不安全的。为了提高效率,因为不用判断同步锁
对于容器而言,被多线程操作,容易出现安全问题,因为,一个线程负责添加,
一个线程负责删除,因为线程的随机性,就会出现安全问题,
枷锁,一个线程在执行容器中的内容时,其他线程不可以执行,
所以,凡是可以操作容器数据的方法,都需要明确这个锁,每调用一次操作容器的
方法,添加,删除,都需要判断这个锁,对于多线程而言,安全了,但是效率低,
对于单线程而言,不涉及安全,但是效率低,所以对于线程提供了StringBuilder,
不需要同步的缓冲区。
实际开发时,建议使用StringBuilder,只有在多线程的时候,才使用StringBuffer。
通常升级无外乎做了三件事:
1.简化书写。
2,提高效率。
3,提高安全性。
StringBuffer和数组容器的区别:
1.数组容器是固定长度的。
StringBudder是可变长度的。
2,数组容器一旦初始化就明确了元素的类型。
StringBuffer可以存储任意类型,包括基本和引用。
3,数组存储完元素可以对元素进行操作(通过角标)。
StringBuffer存储完元素后,都会变成字符串,只能用字符串的方法来操作。
int[] arr ={12,45,66,77};
sop(arr[2]);//66
StringBuffersb = new StringBuffer();
sb.append(56);
sb.append(45);
sb.append(33);
sb.append(true);
输出结果:"564533true"
什么时候使用StringBuffer或者StringBuilder?
数据个数是可以固定的,可以是不固定的。数据的类型也可以是固定的,或者不固定的。,
只要最终这些数据都需要变成字符串来操作时,就可以使用字符串缓冲区。
-----------------------------------------------------------------------------------------
String类的特点:
1,Java语言中用于描述最常见的字符串数据的对象。
2,字符串数据都是一个对象。
3,字符串数据一旦初始化就不可以被改变了。双引号表示的都是字符串常量
4,字符串对象都存储在常量池中。字符串常量池。