String类实在大部分项目开发中都会使用到的一个功能类,并且这个类有如下的特点:
1.每个字符串的常量都属于一个String类的匿名对象;
2.String类有两个常量池:静态常量池、运行时常量池;
3.String类对象实例化建议使用直接赋值的形式完成,这样可以直接将对象保存在对象池中以方便下次使用;
4.但是如果认真去思考也会发现其最大的弊端:内容不允许修改,虽然大部分的情况下都不会涉及到字符串内容的频繁修改,但是依然可能会存在这样的情况,所以为了解决此问题专门提供一个StringBuffer类可以实现字符串内容的修改处理。
5.StringBuffer类不像String类那样拥有两种对象实例化方法,StringBuffer类必须像普通类那样先进行对象实例化,才可以调用方法进行处理。而这时可以考虑使用StringBuffer类中的如下方法:
1. 构造方法: public StringBuffer();
2. 构造方法: public StringBuffer(); // 接受初始化字符串内容
3. 数据追加: public StringBuffer append(数据类型 变量);// 相当于字符串的’+’;
String类与StringBuffer类对比
String类对象引用传递 | StringBuffer类引用传递 |
---|---|
见代码TestDemo1 | 见代码TestDemo2 |
public class TestDemo1 {
public static void main( String[] args ) {
String str = "Hello";
System.out.println("调用方法前的str值:" + str);
change(str);
System.out.println("调用方法后的str值:" + str);
}
public static void change( String temp ) { // 并不能改变str的值
temp += "World!";
}
}
//输出如下:
调用方法前的str值:Hello
调用方法后的str值:Hello
public class TestDemo2 {
public static void main( String[] args ) {
StringBuffer buf = new StringBuffer("Hello");
System.out.println("调用方法前的str值:" + buf);
change(buf);
System.out.println("调用方法后的str值:" + buf.toString());
}
public static void change( StringBuffer temp ) { // 改变了buf的值
temp.append("World!");
}
}
//输出如下:
调用方法前的str值:Hello
调用方法后的str值:HelloWorld!
StringBuffer类的几个方法:
1、插入数据:public StringBuffer insert(int offset, 数据类型 b);
public class TestDemo {
public static void main( String[] args ) {
StringBuffer buf = new StringBuffer("Hi World!!!");
System.out.println("调用方法前的str值:" + buf);
buf.insert(3, 3.14159); // 在第三个数据插入 ,H为0,i为1,空格为2,W为3,故而在W的位置插入
System.out.println("调用方法后的str值:" + buf.toString());
}
}
//输出如下:
调用方法前的str值:Hi World!!!
调用方法后的str值:Hi 3.14159World!!!
2、删除指定范围的数据:public StringBuffer delete(int start, int end);
public class TestDemo {
public static void main( String[] args ) {
StringBuffer buf = new StringBuffer("Hi World!!!");
System.out.println("调用方法前的str值:" + buf);
buf.delete(1, 3); // 删除指定范围,实质范围为[1,3),也就是说只包括1,2而不包括3.
System.out.println("调用方法后的str值:" + buf.toString());
}
}
//输出如下:
调用方法前的str值:Hi World!!!
调用方法后的str值:HWorld!!!
3.倒置:public StringBuffer reverse();
public class TestDemo {
public static void main( String[] args ) {
StringBuffer buf = new StringBuffer("Hi World!!!");
System.out.println("调用方法前的str值:" + buf);
StringBuffer x = buf.reverse();
System.out.println("调用方法后的str值:" + buf.toString());
System.out.println("x值:" + x);
// 利用toString()方法输出和直接使用StringBuffer变量无区别;
}
}
//输出如下:
调用方法前的str值:Hi World!!!
调用方法后的str值:!!!dlroW iH
x值:!!!dlroW iH
4.添加CodePoint:public StringBuffer appendCodePoint(int codePoint);
与普通append无区别,只是加入的是codePoint所对应的char,通过ASCII表
public class TestDemo {
public static void main( String[] args ) {
StringBuffer buf = new StringBuffer("Hi World!!!");
System.out.println("调用方法前的str值:" + buf);
buf.appendCodePoint(74);
System.out.println("调用方法后前的str值:" + buf);
buf.appendCodePoint(75);
System.out.println("再次调用方法后前的str值:" + buf);
}
}
//输出如下:
调用方法前的str值:Hi World!!!
调用方法后前的str值:Hi World!!!J
再次调用方法后前的str值:Hi World!!!JK
PS1:实际上还有一个与StringBuffer类相似的功能类:StringBuilder类,这个类是在JDK1.5的时候提供的,该类中提供的方法与StringBuffer功能相同。最大的区别在于StringBuffer类中的方法属于线程安全,全部使用了synchronized关键字进行标注,StringBuilder类属于非线程安全;
看题:
请解释String、StringBuffer、StringBuilder的区别?
1.String类是字符串的首选类型,其最大的特点是不允许修改;
2.StringBuffer类与StringBuilder类的内容允许修改;
3.StringBuffer类实在JDK1.0的时候提供的属于线程安全操作,而StringBuilder类是在JDK1.5之后提供的属于非线程安全操作;
PS2:有什么出错的地方还望各位看官麻烦指出,感激不尽。