------- android培训、java培训、期待与您交流! ----------
public class StringBufferDemo {
/**
* @param args
*/
public static void main(String[] args) {
/*
* 字符串缓冲区。StringBuffer:
* 特点:
* 1,缓冲区就是用来缓存数据,意味着它是一个容器。
* 2,该容器的长度是可变的。
* 3,提供了对容器中内容的操作的方法(最多无外乎四种:增删改查.)
* 4,该缓冲区中可以添加多种类型的元素,基本类型和引用类型。
* 5,无论怎么样的改变容器中的数据,最终要使用结果,还是必须要将其转成字符串,使用toString方法。
*
* append():追加:在结尾处添加。
*/
//创建一个字符串缓冲区。
StringBuffer sb = new StringBuffer("abcd");
//使用其添加方法,往缓冲区中加入元素。
// StringBuffer s1 = sb.append(45);
// System.out.println(sb==s1);//true,append返回的还是原来的缓冲区。
// sb.append(45).append(true).append("abc");//连续添加,调用动作:方法调用链。
// System.out.println(sb.toString());
// String str = "abc"+4+'c';
// str = new StringBuffer().append("abc").append(4).append('c').toString();
//想要在任意位置添加怎么呢? insert方法。
// sb.insert(1, true);
// System.out.println(sb);
//删除内容。
// sb.delete(0,sb.length());//清空缓冲区。
// System.out.println(sb);//""
//修改一段。
// sb.replace(1, 3, "ak47");
// System.out.println(sb);
System.out.println(sb.reverse());
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------
/*
* StringBuilder含义:
* jdk1.5版本出现了一个新的字符串缓冲区。
* 功能和stringBuffer一模一样。
*
* 到底区别呢?
* StringBuffer是线程安全的。
* StringBuilder是线程不安全的。为了提高效率。 因为不用判断同步锁。
*
*
* 对于容器而已,被多线程操作,容器出现安全问题。因为
* 一个线程负责添加,一个线程负责删除,因为线程的随机性就会出现安全问题。
*
* 加锁,一个线程在执行容器中的内容时,其他线程不可以执行。
* 所以凡是可以操作容器数据的方法,都需要明确这个锁。
* 每调用一次操作容器的方法(添加,删除,)都需要判断这个锁。
* 对于多线程而言,安全了,但是效率低。
* 对已单线程而言,不涉及安全,但是效率低。所以,对于线程提供了StringBuilder。不需要同步的缓冲区。
*
* 实际开发时,建议使用StringBuilder,只有在多线程时,才使用StringBuffer。
*
* 升级:
* 1,简化书写。
* 2,提高效率。
* 3,提高安全性。
*
*/
/*
* StringBuffer和数组容器的区别?
*
* 1,
* 数组容器是固定长度的。
* StringBuffer是可变长度的。
* 2,
* 数组容器一旦初始化就明确了元素的类型。
* StringBuffer可以存储任意类型。包括基本和引用。
* 3,
* 数组存储完元素可以对元素进行操作(通过角标)。
* StringBuffer存储完元素后,都会变成字符串,只能用字符串的方法来操作。
*
* int[] arr = {56,78,23,19};
* sop(arr[2])//23;
*
* StringBuffer sb = new StringBuffer();
* sb.apppend(56);
* sb.apppend(78);
* sb.apppend(23);
* sb.apppend(19);
* sb.apppend(true);
*
* "56782319true"
* 什么时候用StringBuffer或者StringBuilder?
* 数据个数可以是固定的,可是是不固定的,数据类型也可以是固定的,或者不固定的。
* 只要最终这些数据都需要变成字符串来操作时,就可以使用字符串缓冲区。
*
*/
}