StringBuffer类:线程安全的可变字符序列。
构造方法:
StringBuffer() 初始容量为16个;
StringBuffer(String str) 指定字符串的字符串缓冲区,初始容量为16+str的长度;
常用方法:
1.append(obj)表示添加。
2.capacity() 容量
3.delete(start end) 删除,从start 位置开始,不包括end位置。
4.insert(offset obj)向offset位置插入obj
5.length()长度
6.replace(int start ,int end,String str)替换。
7.reverse() 反转。一般用于判断字符串是否为镜面对象, 例如:“abcba”
代码演示:
1 public static void main(String[] args) { 2 //1 》创建对象 3 StringBuffer sb=new StringBuffer(); 4 /*System.out.println(sb.capacity()); 5 System.out.println(sb.length());*/ 6 //2 》 append 添加 7 // System.out.println("===="); 8 // 链式调用 9 sb.append("abc").append("12345678901231");10 /*System.out.println(sb.capacity());11 System.out.println(sb.length());*/12 //2 》创建对象的方式:13 StringBuffer sb1=new StringBuffer("abc");14 /* System.out.println(sb1.capacity());15 System.out.println(sb1.length());*/16 //3 》常用方法:17 StringBuffer sb2=new StringBuffer("abcdef");18 // System.out.println(sb2.delete(0, 3));19 // insert(offset,obj) 向 offset 位置插入 obj20 // System.out.println(sb2.insert(1, " 我 "));21 // System.out.println(sb2.replace(0, 3, " 我们 "));22 System.out.println(sb2.reverse());23 }
StringBuffer与String StringBuilder的区别:
如果是对字符串本身进行增删改操作,用StringBuffer,速度高于String
String 的值不可以改变,而StringBuffer的值可以改变,这也是StringBuffer的增删改速度必String快的原因,因为String的值不可改,所以每次增删改都要新创建一个字符串,而StringBuffer本身是一个数组,它可以改变,不用创建新的,所以必String快
String类的equals方法是重写的,判断字符串值相同就是同一个字符串,StringBuffer没有重写。
StringBuilder: 线程不安全的,但是速度快
StringBuffer: 线程是安全的,但是速度慢
关于StringBuffer和StringBuilder的速度区别,就好比人们挤地铁,StringBuffer只有一个门,门口有地铁的警务员,服务员,很安全,但是上车的速度有点慢,而StringBuilder就好比这个地铁有好多门,虽然速度快,但是会有点不安全。
代码演示:
1 public static void main(String[] args) { 2 String s=""; 3 StringBuffer sb=new StringBuffer(); 4 long start = System.currentTimeMillis(); 5 /*for (int i = 0; i <5000; i++) { 6 s+=i; 7 }*/ 8 for (int i = 0; i <5000; i++) { 9 sb.append(i);10 }11 long end = System.currentTimeMillis();12 // System.out.println(end-start);13 System.out.println(new StringBuffer("abc").equals(new StringBuffer("abc")));14 System.out.println(new String("abc").equals(new String("abc")));15 }
StringBuffer和String类型的转换
StringBuffer---》String:toString()方法;
String----------》StringBuffer : new StringBuffer(str);
包装类“:
java 是面向对象的语言,但并不是完全面向对象的语言,比如String str=new String() str可以调用String类下的方法,
但是int i 这个i 却没有方法可以调用,所以提出了包装类的概念,包装类主要是针对基本数据类型的
基本数据类型 包装类
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
boolean Boolean
包装类的好处是:可以提供更多的功能。
本来int short char 等等类型是没有方法可调用的,但是有了包装类以后,这些类型都可以调用方法了。
Integer:
构造方法:new Integer(int类型的数值);
new Integer(str);将String 转化为Integer类型
常用方法:
parseInt(str) 将str字符串转化为数字
toBinaryString(int i) / toHexString(int i) / toOctalString(int i) 转化为二进制 十六进制 八进制
装箱与拆箱:
装箱:将int类型包装成Integer类
拆箱:将Integer转化为int 类型
Character包装类常用方法:
isDigit(obj) 判断obj是否为数字
isLetter(char ch ) 判断是否为字符(包括汉字)
代码演示:
1 public class 包装类 { 2 public static void main(String[] args) { 3 int a=5; 4 Integer a1=5; 5 // 最大值与最小值 6 /*System.out.println(Integer.MAX_VALUE); 7 System.out.println(Integer.MIN_VALUE); 8 System.out.println(new Integer("123"));*/ 9 // System.out.println(Integer.parseInt("456")==456);10 System.out.println(Integer.valueOf("789"));11 // 进制转换12 /*System.out.println(Integer.toBinaryString(5));13 System.out.println(Integer.toHexString(15));*/14 // String s3="123";15 // 拆箱与装箱16 Integer i=5;// 装箱17 new Integer(5);18 int b=i;// 拆箱19 }20 }