StringBuffer的认识及与数组、String的区别

StringBuffer

在开始时,首先看看Stringstringbuffer的区别?

String是一个不可变的字符序列,而stringbuffer是一个可变的字符序列。

内存方面:String是在常量区开辟空间,比较耗费内存,而stringbuffer是一个字符串缓冲区,当字符串的大小没有超过缓冲区的容量时,可以调用之前的字符串,不用开辟新的空间

Stringbuffer提供的是字符串缓冲区,是属于java.lang包里的,被final修饰

Stringbuffer的构造方法:

StringBuffer():无参构造的格式,初始化容量为16

StringBufferint capacity):指定容量构造一个字符串缓冲区

StringBufferString str):构造一个字符串缓冲区,并将其内容初始化为指定的容量。

构造一个StringBuffer缓冲区的一般格式为:

StringBuffer sb=new StringBuffer();

例如:

package TextDome;
/*StringBuffer():无参构造的格式,初始化容量为16
StringBuffer(int capacity):指定容量构造一个字符串缓冲区
StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的容量。*/
public class StringBufferDome {
public static void main(String[] args) {
StringBuffer s=new StringBuffer();
System.out.println("s:"+s);
System.out.println("length():"+s.length());
System.out.println("capacity():"+s.capacity());
System.out.println("------------------");
StringBuffer s1=new StringBuffer(73);
System.out.println("length():"+s1.length());
System.out.println("capacity():"+s1.capacity());
System.out.println("-------------------");
StringBuffer s2=new StringBuffer("baby"); 
System.out.println("length():"+s2.length());
System.out.println("capacity():"+s2.capacity());//这里是缓冲区初始化容量16与字符串的长度之和
}
}
运行结果:
/**
 * @param args
 * s:
 * length():0
 * capacity():16
 * -------------
 * length():0
 * capacity():73
 * -------------
 * length():4
 * capacity():20
 */

StringBuffer的功能:

1)添加功能:

(它在实际开发中使用最多)Public  StringBuffer  append(任何数据类型...),在末尾添加,并且返回到字符串缓冲区本身

Public  StringBuffer  insertint offsetString str):将str字符串添加到指定的位置,返回的也是字符串缓冲区本身

例如:

package TextDome;
 
public class StringBufferDome01 {
 
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
sb.append("hello");
sb.append('A');
sb.append(1996);
System.out.println("sb:"+sb);
System.out.println("---------------");
sb.insert(5, "迪丽热巴");
System.out.println("sb:"+sb);
}
}
运行结果:
/**
 * @author 杰哥
 *sb:helloA1996
 *---------------
 *sb:hello迪丽热巴A1996
 */

2)删除功能

public StringBuffer deleteCharAt(int index):移除指定位置处的字符..

public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...

例如:

package TextDome;
/**
 * StringBuffer的删除功能:
 * 
 * public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
 * public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
 */
public class StringDomedelete {
 
public static void main(String[] args) {
StringBuffer s=new StringBuffer();
s.append("Iloveyou");
s.append("迪丽热巴");
s.deleteCharAt(8);
System.out.println("s:"+s);
System.out.println("------------");
s.delete(1, 5);
System.out.println("s:+"+s);
}
}
运行结果:
/**
 * @author 杰哥
 *s:Iloveyou丽热巴
 *--------------
 *s:+Iyou丽热巴
*/

3)反转功能

public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身

package TextDome;
//public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身
public class StringBufferReverse {
 
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
sb.append("abcdef");
System.out.println(sb.reverse());
}
}
运行结果:
fedcba

4)截取功能

public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串

  public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串

例如:

package TextDome;
/*public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串*/
public class StringBufferSubstring {
 
public static void main(String[] args) {
StringBuffer ss=new StringBuffer();
ss.append("迪丽热巴最美");
String str=ss.substring(2);
System.out.println("str:"+str);
String str1=ss.substring(0, 2);
System.out.println("str1:"+str1);
}
}
运行结果:
/**
 * @author 杰哥
 *str:热巴最美
 *str1:迪丽
 */

5)替换功能

public StringBuffer replace(int start,int end,String str)

从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身

例如:

package TextDome;
 
public class StringBufferReplace {
 
public static void main(String[] args) {
StringBuffer s1=new StringBuffer();
s1.append("baby最美");
s1.replace(0, 4, "迪丽热巴");
System.out.println("s1:"+s1);
}
}
 
运行结果:s1:迪丽热巴最美

StringBufferString之间的相互转化:

例如:
package TextDome;
public class StringBufferChange {
public static void main(String[] args) {
//String转换成StringBuffe
String s="reverse";
//方式1:通过带参方法
StringBuffer sb=new StringBuffer(s);
System.out.println("sb:"+sb);
//方式2:通过无参方法给进行赋值
StringBuffer sb2=new StringBuffer();
sb2.append(s);
System.out.println("sb2:"+sb2);
System.out.println("--------------");
//StringBuffer转换成String
StringBuffer sb3=new StringBuffer("subString");
//方式1
String str=new String(sb3);
System.out.println("str:"+str);
//方式2
String str2=sb3.toString();//这是StringBuffer的特有功能
System.out.println("str2:"+str2);
}
}
运行结果:
/**
* @author 杰哥
*sb:reverse
*sb2:reverse
*-------------
*str:subString
*str2:subString
*/

StringBuffer、String和StringBuilder的区别?

StringBuffer和StringBuilder都是一个可变的字符序列,提供了一个缓冲区(两者都可以看做容器)

StringBuffer:线程是安全的,同步的,执行效率低

StringBuilder:线程不安全的,不同步的,执行效率高,并且在单线程中优先采取StringBuilder

StringBuffer执行效率虽然低,但是在内存角度优于String类型,并且他还是一个可变的字符序列,

StringBuffer与数组的区别?

数组:他可以存储多个数据的容器,并且多个数据的类型必须一致

数组长度功能:length属性

StringBuffer:它是一个容器,它在缓冲区始终存储的只能是字符串类型的数据

获取缓冲区的长度:length()方法

 

猜你喜欢

转载自blog.csdn.net/j_better/article/details/80104477