您的位置:首页 > 产品设计 > UI/UE

《黑马程序员》java笔记->StringBuffer概述及StringBuilder和数组的区别

2013-06-16 17:28 513 查看
------- 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?
* 数据个数可以是固定的,可是是不固定的,数据类型也可以是固定的,或者不固定的。
* 只要最终这些数据都需要变成字符串来操作时,就可以使用字符串缓冲区。

*/

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stringbuffer