先来两个面试题:
1.String,StringBuffer,StringBuilder的区别:
a.StringBuffer和StringBuilder的区别:
StringBuffer是jdk1.0版本的,是线程安全的,效率低
StringBuilder是jdk1.5版本的,是线程不安全的,效率高
b.String和StringBuffer,StringBuilder的区别
String是不可变的字符序列
StringBuffer和StringBuilder是可变的字符序列
2.String和StringBuffer分别作为参数传递问题
我们知道基本数据类型是值传递,不会改变其值,引用数据类型是是址传递,会改变其值。
但是String类虽然是引用数据类型,当作参数传递时,不会改变其值,因为方法里面对String值改变的操作,都是再创建以string对象,并且该对象随着方法的结束而变成垃圾。
String对象的特点,一旦被初始化,就不能被改变
StringBuffer则与String不一样,同其他引用数据类型一样,做参数传递时,同样传入的是地址值,但是方法中发生改变返回的是本身,方法弹栈后,改变的值仍然有效。
StringBuffer的添加功能:
1.public StringBuffer append(String str):可以把任意数据类型添加到字符串缓冲区里面,并返回字符串缓冲区本身
注意:StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符数组,当调用添加的方法时,不会再重新创建对象,而是不断向原缓冲区添加字符
StringBuffer类中重写了toString方法,显示的是对象中的属性值
2.public StringBuffer insert(int offsert, String str): 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符缓冲区本身
注意:如果没有指定位置的索引就会报StringIndexOutOfBoundsException异常。
StringBuffer的删除功能:
1.public StringBuffer deleteCharAt(int index) 删除指定位置的字符,并返回字符缓冲区本身
注意:当缓冲区中这个索引上没有元素的时候就会报StringIndexOutOfBoundsException异常
2.public StringBuffer delete(int start,int end) 删除从指定位置开始到指定位置结束的内容,返回字符缓冲区本身
若清空缓冲区可写为delete(0,sb.length())
StringBuffer的替换功能:
1.public StringBuffer replace(int start,int end,String str) 从start开始到end结束用str替换
2.StringBuffer的反转功能 public StringBuffer reverse() 将字符串反转
StringBuffer的截取功能:
1.pubic string subString(int start) 从指定位置开始截取到末尾
2.public string subString(int start, int end) 截取从指定位置开始到指定位置结束
注意:返回值的类型是String,不再是StringBuffer本身。返回的是一个新的字符串,原StringBuffer本身不变。
StringBuffer与String的转换:
1.String——> StringBuffer
a.通过构造方法
b.通过append方法
2.StringBuffer——>String
a.通过构造方法
b.通过toString方法
c.通过subString(0,str.length)
|
|