奋斗黑马程序员----Java之StringBuffer与StringBuilder
来源:互联网 发布:java多线程处理高并发 编辑:程序博客网 时间:2024/04/29 18:26
----------android培训、java培训、期待与您交流! ----------
/**java之StringBuffer与StringBuilder * *//**1,StringBuffer简介: * public final class StringBuffer --extends Object implements Serializable, * CharSequence线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能 * 修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改 * 变该序列的长度和内容。 * * buffer:缓冲区的意思 * StringBuffer是字符串缓冲区 * String的对象一旦初始化就不能被改变,而StringBuffer可以用于对字符串进行修改的。 * * StringBuffer: * 1,是一个容器,而且长度是可变化的。(数据的长度是固定的) * 2,可以直接操作多个数据类型。(数组一次只能操作一个) * 3,最终会通过toString方法变成字符串。 * * * StringBuilder(1.5以后出现) * public final class StringBuilder extends Object implements Serializable, * CharSequence,一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但 * 不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被 * 单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大 * 多数实现中,它比 StringBuffer 要快。 * * StringBuffer是线程同步,更安全,单线程,用StringBuffer效率低,因为用 * 一次就要判断锁。 * StringBuilder是线程不同步,但毕老师选择用StringBuilder,因为是后出的。 * ????不需要判断锁,快捷,效率高。 * 将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则 * 建议使用 StringBuffer。 * * 以后开发建议使用StringBuilder * * java的升级无外乎三个: * 1,提高效率,最重要。 * 2,简化书写 * 3,提高安全性 * *//**2,StringBuffer可以看成是一个容器 * 容器的特点:CURD(create,update,read,delete) * 1,存储; * StringBuffer append();将指定的数据作为参数添加到已有数据的结尾处。 * StringBuffer insert(int offset,任意类型数据);可以将数据插入到指 * 定offset位置,有角标越位的限制。 * 2,删除; * StringBuffer delete(start,end);删除缓冲区的数据,包含start,不包 * 含end。(是按角标说的,非长度变量) * StringBuffer deleteChar(index);删除指定位置的字符 * 3,获取; * char charAt(int index);获取指定位置的字符 * int indexOf(String str);根据字符串获取位置。 * int lastIndexOf(String str); * int length(); * String substring(int start); * String substring(int start, int end); * * 4,修改;也可以理解为“替换” * StringBuffer replace(int start, int end, String str);包含头,不包含尾 * void setCharAt(int index, char ch);单个字符的替换,将指定位置替换为ch字符 * * 5,反转: * StringBuffer reverse();反转 * * 6, void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin); * 后面的dst数组有越界的限制,将缓冲中的指定数据存储到指定数组中。(包含头,不包含尾) * * * 面盆理论: * StringBuffer就是一个面盆,而里面的东西无论怎么换,也无论原料怎么更改, * 怎么添加和减少,这儿面盆都是一直不变的。 * */class StringBufferDemo{public static void main(String[] args){//method_add();//method_delete();method_update();//StringBuffer sb = new StringBuffer("abcdefg");//StringBufferStringBuilder sb = new StringBuilder("abcdefg");//StringBuilderchar[] cha = new char[5];sb.getChars(1,4,cha,1);for(int x=0;x<cha.length;x++){sop("cha["+x+"]="+cha[x]+";");}}/**添加数据的方法 * */public static void method_add(){StringBuffer sb = new StringBuffer();sb.append("abc").append(true).append(32);//方法调用链:方法返回的还是本类对象,还可以调用本类方法sb.insert(1,"qq");// StringBuffer sb1 = sb.append(32);// sop("sb==sb1:"+(sb==sb1));/* * String toString() Returns a string representing the data in this sequence. */sop(sb.toString());//输出:abctrue32// sop(sb1.toString());}/** * 删除操作 */public static void method_delete(){/* StringBuffer delete(int start, int end) * Removes the characters in a substring of this sequence. * 包含首,不包含尾 * */StringBuffer sb = new StringBuffer("abcde");//sb.delete(1,3);//bc就被删除了//清空缓冲区。//sb = new StringBuffer();//这么做也可以,但是相当于把面盆扔了,有点败家,相当于又重新开辟一个缓冲区//sb.delete(0,sb.length());//清空操作//sb.delete(2,3);//删除csb.deleteCharAt(2);//也是删除c,但是比上面的更方便,删除指定位置的字符。sop(sb.toString());}public static void method_update(){StringBuffer sb = new StringBuffer("abcde");sb.replace(1,4,"java");//输出:ajavaesb.setCharAt(2,'B');sop(sb.toString());}public static void sop(String str){System.out.println(str);}}/** * StringBuilder在操作上和StringBuffer基本相同,但StringBuilder是线程 * 不安全的。 */public class StringBuilderDemo {public static void main(String[] args) {method_add();}public static void method_add(){StringBuilder sb = new StringBuilder();sb.append("adddddd");sb.append("bcccccc");System.out.println(sb.length());System.out.println(sb.toString());}}/**3,基本数据类型对象包装类: * * 基本数据类型(类,引用数据类型) * byte,Byte * shortShort * intInteger * longLong * booleanBoolean * floatFloat * doubleDouble * charCharacter * * 基本数据类型对象包装类的最常见作用,就是用于基本数据类 * 型和字符串类型之间做转换。 * * 那么怎么转呢? * 1.基本数据类型转成字符串, * 方法:基本数据类型+"" * 基本数据类型.toString(基本数据类型值); * 如:Integer.toString(32);//将32变成字符串"32" * 2.字符串转成基本数据类型。(静态调用方式) * xxx a = Xxx.parseXxx(String); * 如:int a = Integer.parseInt("234"); * double b = Double.parseDouble("3234.34"); * * 但是: * boolean b = Boolean.parseBoolean("true"); * 对于char类型的,由于字符是字符串的最小单位, * 所以不用转,可以直接操作。 * * * 十进制转成其他进制: * toBinaryString(); * toHexString(); * toOctalString(); * 其他进制转成十进制: * static int parseInt(String s, int radix);使用第二个参 * 数指定的基数,将s转成指定进制radix的数。 * 如:parseInt("-FF", 16) 返回 -255 * parseInt("1100110", 2) 返回 102 * * 对象调用方式: * Integer i = new Integer("234"); * int num = i.intValue();//非静态的 * */public class IntegerDemo {public static void main(String[] args) {//整数类型的最大值sop("Integer max value"+Integer.MAX_VALUE);//将一个字符串转成整数:int num = Integer.parseInt("12891");sop("num="+num);Long x = Long.parseLong("8938982838924");sop("x = "+x);/* * static String toBinaryString(int i) 以二进制 * (基数 2)无符号整数形式返回一个整数参数的字符 * 串表示形式。 */String s1 = Integer.toBinaryString(-7);String s2 = Integer.toBinaryString(8);sop("s1 = "+s1);//s1 = 11111111111111111111111111111001sop("s2 = "+s2);//8的二进制表示: 1000//sop(Integer.toHexString(60));//int t = Integer.parseInt("120",10);//转成十进制的120//int t = Integer.parseInt("110",2);//转成2进制的6int t = Integer.parseInt("3c",16);//转成十六进制的60sop("t="+t);}public static void sop(Object obj){System.out.println(obj);}}/**4,JDK1.5版本以后出现的新特性. * * 装箱:把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。 * int包装成Integer、float包装成Float * 拆箱:和装箱相反,将引用类型的对象简化成值类型的数据 * Integer a = 100; 这是自动装箱 (编译器调用的是static Integer valueOf(int i)) * int b = new Integer(100); 这是自动拆箱 * */class IntegerDemo1 {public static void main(String[] args) {Integer x = new Integer(5);Integer y = 5;//自动装箱,相当于new Integer(5);简化书写·y是一个对象y = y+2;//y+2,进行了自动拆箱,变成了int类型,和2进行加法运算。再将和进行装箱赋给y//拆箱原理:y+2y进行了y.intValue();操作Integer m = 128;Integer n = 128;sop("m==n:"+(m==n));//m==n:false/**byte能最大识别:-128~127,如果不超过这个范围,则系统不会在内存中开辟空间,直接拿来使用,如果超过了这个范围,则系统会开辟空间,也就造成了m和n不相等的原因。*/Integer a = 127;Integer b = 127;sop("a==b:"+(a==b));/*a==b:true,因为a和b指向了同一个Integer对象,因为当数值在byte范围内,对于新特性,如果该数值已经存在, *则不会再开辟新的空间。 */Integer a2 = new Integer(128);Integer a3 = new Integer(128);System.out.println("a2 == a3 : "+(a2 == a3));//a2 == a3 : falseSystem.out.println("a2.equals(a3) = "+a2.equals(a3));//a2.equals(a3) = true}public static void method(){// Integer x = new Integer("123");Integer y = new Integer(123);/**Integer本身复写了Object中的equals方法,比较的是数值是否相同。*/sop("x==y:"+(x==y));sop("x.equals(y):"+x.equals(y));}public static void sop(String str){System.out.println(str);}}
----------android培训、java培训、期待与您交流!----------
详细请查看:http://edu.csdn.net/heima/
- 奋斗黑马程序员----Java之StringBuffer与StringBuilder
- 黑马程序员_JAVA之StringBuffer 与 StringBuilder
- 黑马程序员:Java基础——StringBuffer与StringBuilder
- 黑马程序员 Java学习总结之StringBuilder和StringBuffer
- 黑马程序员——StringBuffer 与 StringBuilder
- 黑马程序员--------java String、StringBuffer、StringBuilder
- JAVA之StringBuffer与StringBuilder
- 黑马程序员--String&StringBuffer&StringBuilder
- 黑马程序员-String、StringBuffer、StringBuilder
- 黑马程序员_String-StringBuffer-StringBuilder
- 黑马程序员-------String,StringBuffer,StringBuilder
- 黑马程序员-------String StringBuffer StringBuilder
- 黑马程序员-stringbuffer和stringbuilder
- 黑马程序员-String-StringBuffer-StringBuilder
- 【黑马程序员】Java基础06:StringBuffer和StringBuilder的效率与安全性
- 黑马程序员----java基础第13天(字符串的操作,StringBuffer与StringBuilder)
- 黑马程序员—Java基础学习笔记之String&&StringBuffer&&StringBuilder
- 黑马程序员 _ java基础_之StringBuffer类,StringBuilder类
- 奋斗黑马程序员----Java之String对象
- 猜拳小游戏
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;解决办法
- 网络资源链接收集整理
- 采用什么开发工具和GUI组件开发JavaSE应用程序?
- 奋斗黑马程序员----Java之StringBuffer与StringBuilder
- 4.9
- 利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
- Dojo 扩展 javascript 核心库 - dojo.hitch
- 第五堂课后作业
- 1
- 将NetBeans的快捷键变成Eclipse的?
- 2013编程之美-测试赛
- mysql 安装