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,字符串对象都存储在常量池中。字符串常量池。