String和StringBuffer和StringBulider的联系与区别(个人理解)

String:不可变字符序列。
StringBuffer:可变字符序列,并且线程安全,但是效率低。
StringBuilder:可变字符序列,线程不安全,但是效率高(一般用它)。

区别在于在使用String时候,每次对在字符进行添加数据的时候,都会产生一个新的对象。因为String产生的空间是固定的,所以不能直接进行添加,需要用加法或者用一个新的字符串来进行添加。
例如:

String s1 = new String("abcdef");
String s2 = new String("ghijk");
String s3 = s1+s2;
String s4 = "abcdef"+"ghijk";
String s5 = "abcdef";
System.out.println(s1==s5);//false
System.out.println(s3==s4);//false
System.out.println(s1.equals(s5));//true

从上述的代码中可以看出使用String的方法不同,产生的空间也不同。所以导致栈指向的对象也不同。
只要每一次对字符串进行修改就会产生一个新的对象。于是由此产生了StringBuffer和StringBuilder的使用。

在StringBuilder中一共有这些常用方法:

public StringBuilder append() //该方法是对字符串进行连接,添加新的内容,且返回的对象不变
public StringBuilder delete(int start,int end) //显示从开始的位置到结束的位置进行删除,且返回的还是这个对象。
public StringBuilder deleteCharAt(int index) //删除索引此处特定的一个char内容,并返回对象不变
public StringBuilder insert()  //在特定的位置进行插入字符,且返回对象不变
public StringBuilder reverse() //将字符的内容倒序输出,且返回对象不变
public int indexOf(String str) //可以用来判断是否有该字符
public int indexOf(Stringstr,intfromIndex) //判断从某个字符到某个字符是否存在
public String substring(int start) // 返回一个新的字符,但是是以选择的地方开始
public String substring(int start,int end) //返回一个新的字符,以自己选择的位置开始

也可以从这里可以看出

//使用String方法
long num1=Runtime.getRuntime().freeMemory();//获取系统剩余内存空间
long time1=System.currentTimeMillis();//获取系统的当前时间
		for(inti=0;i<5000;i++){
		str8=str8+i;//相当于产生了5000个对象
		}
long num2=Runtime.getRuntime().freeMemory();
long time2=System.currentTimeMillis();
System.out.println("String占用内存:"+(num1-num2));
System.out.println("String占用时间:"+(time2-time1));

//使用StringBuffer方法
StringBuilder sb1=newStringBuilder("");
long num3=Runtime.getRuntime().freeMemory();
long time3=System.currentTimeMillis();
	for(inti=0;i<5000;i++){
		sb1.append(i);
	}
long num4=Runtime.getRuntime().freeMemory();
long time4=System.currentTimeMillis();
System.out.println("StringBuilder占用内存:"+(num3-num4));
System.out.println("StringBuilder占用时间:"+(time4-time3));

上述得出来的代码可以看出StringBuilder的占用内存和占用时间远远小于String。就是因为StringBuilder的空间是动态的。只需要向其中添加时一直修改其空间即可。
而String的使用会导致每一次进行i+1的操作时,进行new一个新的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值