黑马程序员 日记四:String、StringBuffer和StringBuilder的比较与总结

本文详细介绍了Java中String、StringBuffer与StringBuilder的特性与用法,包括它们的区别、实现方式及如何在实际场景中合理选择使用。特别展示了通过自定义方法模仿String类的部分方法实现,提供了深入的实践案例。

---------------------- android培训java培训、期待与您交流!

String

API文档中,有如下描述:

public final class String extends Object implements SerializableComparable<String>, CharSequence

可以看出,Stirng是不被继承的。

String有如下特性:

长度固定,一旦被生成出来,就不能被改变。

代码解释:

String str1 = "abc";

str1 = "def";

关于这两行代码,并非改变了字符串,"abc"这个字符串一直没有改变,而是str1从指向"abc"变为指向"def"

如果想改变字符序列,可以使用StringBuffer或者StringBuilder实现。

StringBuffer

API文档中,对StringBuffer有如下描述:

public final class StringBuffer extends Object implements SerializableCharSequence

可以看出,StringBuffer也是不被继承的,而且,他是线程安全的类,也就是说,其内部的方法,是互斥的。

StringBuffer类提供了append,insert,delete,deleteCharAt,setCharAt等方法,来改变当前的StringBuffer对象。

StringBuilder

API文档中,描述如下:

public final class StringBuilder extends Object implements SerializableCharSequence

同样不能被继承,并且其方法几乎和StringBuffer相同,区别于StringBuffer是线程安全的,而StringBuilder并不是线程安全的,没有线程同步保证机制。

在毕向东老师讲课过程中,用自己的方法实现了String的部分方法,以下是我实现的部分方法:

//用来模仿String类里的trim方法,去除字符串前后的空格。
public String simTrim (String str) {
		StringBuffer sb = new StringBuffer (str);
		while (sb.charAt(0) == ' ') {
			sb.deleteCharAt(0);
		}
		
		while (sb.charAt(sb.length()-1) == ' ') {
			sb.deleteCharAt(sb.length()-1);
		}
		return sb.toString();
		}

该方法中,可以讲StringBuffersb变成StringBuilder

	//该方法用来计算母串中包含几个子串;
public int getTimes (String mager, String sub) {
		int times = 0;
		if (mager.length() < sub.length()) {
			
		} else {
			for (int i = 0; i+sub.length() <= mager.length(); i++) {
				if (mager.substring(i, i+sub.length()).equals(sub)) {
					times++;
				}
			}
		}
		return times;
		}

与毕向东老师实现的代码不同的是:在母串为"kkk",子串为"kk"的情况下,毕老师的方法,结果为1,我实现的方法结果为2,因为我认为母串中前两个kk和子串相同,后两个kk也和子串相同,应该算两个。

 -------------------------------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值