一,StringBuffer类
1,String和StringBuffer的区别:
- String是一个不可变的字符序列
- StringBuffer是一个可变的字符序列
2,StringBuffer,String和StringBuilder的区别:
StringBuffer和StringBuilder的区别
- StringBuffer是jdk1.0版本的,是线程安全的,效率低(因为要检验锁)
- StringBuilder是jdk1.5版本的,是线程不安全的,效率高
String和StringBuffer,StringBuilder的区别
- String是一个不可变的字符序列
- StringBuffer,StringBuilder是可变的字符序列
3,常用的方法
1,StringBuffer类,返回值都是StringBuffer.
- A:StringBuffer的构造方法:
- public StringBuffer():无参构造方法
- public StringBuffer(int capacity):指定容量的字符串缓冲区对象
- public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
B:StringBuffer的方法:
- public int capacity():返回当前容量。 理论值
- public int length():返回长度(字符数)。 实际值
C:添加元素的功能:
- public StringBuffer append(String str):
- public StringBuffer insert(int offset,String str):
D:删除字符的功能:
- public StringBuffer deleteCharAt(int index):
- public StringBuffer delete(int start,int end):
E:替换字符的功能:
- public StringBuffer replace(int start,int end,String str):
- public StringBuffer reverse()://字符串反转
以上功能方法有个特别要注意的事项:
就是以上方法都是有个共同的特点:底层源码均是return this;
/*以下的所有增删方法操作,所有的引用都是指向同一个地址值.
(也就是说操作都是堆内存的同一个对象).因为底层是return this
*/
StringBuffer sb=new StringBuffer("我爱中国ilovechina");
StringBuffer sb2=sb.append("11");
StringBuffer sb3=sb.append("22");
StringBuffer sb4=sb.append("33");
StringBuffer sb5=sb2.insert(3, true);
StringBuffer sb6=sb.delete(6, 8);
/*输出都是一样,因为引用指向的都是同一个对象*/
System.out.println(sb);
System.out.println(sb2);
System.out.println(sb3);
System.out.println(sb4);
System.out.println(sb5);
4,String与StringBuffer的转换
StringBuffer转为String类型
- a:通过构造方法String(StringBuffer buffer)
分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。 - b:通过toString()方法
- c:通过subString(0,length);
- a:通过构造方法String(StringBuffer buffer)
String 转为 StringBuffer 类
- a:通过构造方法StringBuffer(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。 - b:通过append()方法
- a:通过构造方法StringBuffer(String str)
二,基本数据类的包装类
基本类型和包装类的对应
byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
举个一个代表的例子,即可说明所有包装类的特性:
这些包装类就是将基本数据类型包装成对象,以及封装了许多功能方法.
int – >String
- a:和”“进行拼接;//常用
- b:public static String valueOf(int i);//常用
- c:int – Integer – String(Integer类的toString方法())
- d:public static String toString(int i)(Integer类的静态方法)
String –>int
- public static int parseInt(String s);
代码演示:
String str="11111";
Integer.parseInt(str);//字符串转int
int i=3333;
str=i+"";//int 转成字符串
str=String.valueOf(i);//int 转成字符串
System.out.println(str);
JDK5新特性之自动装箱和拆箱
- JDK5的新特性
- 自动装箱:把基本类型转换为包装类类型
- 自动拆箱:把包装类类型转换为基本类型
- 案例演示
- JDK5的新特性自动装箱和拆箱
Integer ii = new Integer(100);//通常的对象的创建步骤
Integer ii = 100;//有了自动装箱后,其实底层就是上一句的操作.
ii += 200;//此处为自动拆箱,将Integer类对象的转换成了基本数据类型
- 注意事项
- 在使用时,Integer x = null;代码就会出现NullPointerException。
- 建议先判断是否为null,然后再使用。
以下的代码需特别比较,你会发现一个有趣的问题:
Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2);//false
System.out.println(i1.equals(i2));//true
System.out.println("-----------");
Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4);//false
System.out.println(i3.equals(i4));//true
System.out.println("-----------");
Integer i5 = 127;
Integer i6 = 127;
System.out.println(i5 == i6);//true,其实就是这里
System.out.println(i5.equals(i6));//true
System.out.println("-----------");
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);//false,还有这里
System.out.println(i7.equals(i8));//true
从上面的结果以及查看源码Integer类中的IntegerCache可以知道
自动装箱和拆箱的范围在 -128~ 127之间是不会创建对象的,而是从常量池中获取,如果超过了byte取值范围,就会再创建一个对象.