java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java StringBuffer类

Java基础类库之StringBuffer类用法详解

作者:样子的木偶

String类是在所有开发项目开发之中一定会使用的一个功能类。虽然String类很好用,但也有弊端——内容不允许频繁修改,所以为了解决问题,我们提供了StringBuffer类。本文就来讲讲StringBuffer类的用法

StringBuffer类

String类是在所有开发项目开发之中一定会使用的一个功能类,并且这个类拥有如下功能

虽然String类很好用,但是我们发现它也有弊端,就是内容不允许频繁修改,所以为了解决问题,我们提供了StringBuffer类

StringBuffer 并不像String类那样拥有两种实例化方法,必须要想普通方法一样调用方法,这个时候可以考虑一下方法

范例:观察String与StringBuffer对比

String类对象引用传递

public class JavaAPIDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str ="hello";
		change(str);
		System.out.println(str);
	}
	public static void change(String temp) {
		temp+="word";
	}

}

str内的值没有发生改变

StringBuffer类对象引用传递

public class JavaAPIDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuffer buf =new StringBuffer("Hello  ");
		change(buf);
		System.out.println(buf);
	}
	public static void change(StringBuffer temp) {
		temp.append("World");
	}

}

buf内的值发生了改变

由此可见String内的值不能改变,StringBuffer内的值可以改变,这就是两这最主要的区别

实际上大部分的情况下,很少会出现有字符串内容的改变,这种改变指的并不是针对静态常量池的改变;

范例:分析一下已有问题

public class JavaAPIDemo {

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

}

在这个时候strB对象里面的内容并不是真正改变,或者更严格的将,对于现在的strB当程序编译的时候就相当于下面形式

buf.append(“www.”).append(“baidu.”).append(“com”);

也就是说所有的”+“在我们编译后都变为了StringBuffer中的append()方法,并且在程序中String类对象和StringBuffer类对象本来就可以互相转换

在StringBuffer类里面除了可以支持字符串内容修改之外,实际上也添加了很多String所不具有的方法

public class JavaAPIDemo {

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

}

删除指定范围的数据:public StringBuffer delete(int start,int end);

public class JavaAPIDemo {

	public static void main(String[] args) {
	
	StringBuffer buf=new StringBuffer();
	buf.append("Hello World!").delete(6, 12);
	System.out.println(buf);
	}

}

-字符串内容反转:public StringBuffer reverse();

public class JavaAPIDemo {

	public static void main(String[] args) {
	
	StringBuffer buf=new StringBuffer();
	buf.append("Hello World!");
	System.out.println(buf.reverse());
	}

}

实际上与StringBuffer类还有一个类似的功能类:StringBuilder类,这个类是在JDK1.5之后提供的,该类中提供的方法与StringBuffer类相同,区别在于StringBuffer类中的方法属于线程安全的,全都使用了synchronized关键字进行标注,而StringBuilder类属于非线程安全的

面试题:请解释String、StringBuffer、StringBuilder的主要区别?

String类是字符串的首选类型,其最大的特点是内容不允许修改;

StringBuffer与StringBuilder类的内容允许修改;

StringBuffer是在JDK1.0的时候提供的,属于线程安全操作,而StringBuilder是在JDK1.5的时候提供的不是线程安全操作

到此这篇关于Java基础类库之StringBuffer类用法详解的文章就介绍到这了,更多相关Java StringBuffer类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文