StringBuffer类

StringBuffer类

String特点:

  • 每一个字符串的常量都属于一个String类的匿名对象,并且不可更改。
  • String有两个常量池:静态常量池、运行时常量池
  • String类对象实例化建议使用直接赋值的形式完成,可以直接将对象保存在对象池之中方便下次重用。

弊端:内容部不允许修改

解决方案:StringBuffer类

 

范例:来观察String与StringBuffer类的对比

//String类

public class StringDemo{
	public static void main(String[] args) {
		String str  = "Hellow";
		change(str);
		System.out.println(str);
	}
	public static void change(String temp) {
		temp += "Word!";
	}
}

Hellow


结果并未改变

String必须像普通对象一样进行实例化才可以进行处理

  • 构造方法:public StringBuffer();
  • 数据追加:public StringBuffer append(数据类型 变量),相当于字符串中的“+”。
//StringBuffer类

public class StringBufferDemo {
	public static void main(String[] args) {
		StringBuffer stringbuffer  = new StringBuffer("Hellow");
		change(stringbuffer);
		System.out.println(stringbuffer.toString());
	}
	public static void change(StringBuffer temp) {
		temp.append(" Word!");
	}
}

Hellow Word!

大部分情况下很少出现字符串内容的改变,这种改变指的并不是静态常量池的改变。


public class Demo {
	public static void main(String[] args) {
		String strA = "www.baidu.com";
		String strB = "www."+"baidu"+".com";
		System.out.println(strA == strB);
	}
}

true

注意:这种形式并不算改变,编译之后strB与strA的内容是一样的,String在编译时的变化如下:

String strA = "WWW."+"BAIDU"+".COM";
//在编译运行时的情况
StringBuffer buf = new StringBuffer();
buf.append("WWW.").append("BAIDU").append(".COM")

String与StingBuffer之间本来就可以互相转换,“+”等同“append()”

  • String类变为StringBuffer可以依靠StringBuffer类的构造方法或者append()方法
  • 所有的对象都可以通过toString()方法变为字符串

String类不具备但StringBuffer具备的方法:

  • insert(int 脚标,数据类型 内容):在指定的脚标位置插入指定内容
	public static void main(String[] args) {
		StringBuffer buf = new StringBuffer();
		buf.append(".com").insert(0, "www.").insert(4, "baidu");
		System.out.println(buf);
	}

 www.baidu.com

  • delete(int 开始脚标,int 结束脚标):删除范围的数据
public static void main(String[] args) {
    StringBuffer buf = new StringBuffer();
    buf.append(".com").insert(0, "www.").insert(4, "baidu").delete(4, 9);
    System.out.println(buf);
}

 www..com

  • reverse():String内容反转


public class StringBuffer类 {
	public static void main(String[] args) {
		StringBuffer buf = new StringBuffer();
		buf.append(".com").insert(0, "www.").insert(4, "baidu").reverse();
		System.out.println(buf);
	}

moc.udiab.www

实际上与StringBuffer类还有一个类似的功能类:StringBuider类,JDK1.5提供。该类中提供的方法与StringBuffer功能相同,最大的区别在于StringBuffer类的方法属于线程安全的,全部使用了syncrhrozed关键字进行标注,而StringBuider类属于非线程安全的。

面试题:解释String、StringBuffer与StringBuider的区别?

  • String类是字符串的首选类型,其最大的特点是内容不允许修改
  • StringBuffer与StringBuider类的内容允许修改
  • StringBuffer是在JDK1.0提供的,属于线程安全的操作,StringBuider是在JDK1.5提供的,属于非线程安全操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值