您的位置:首页 > 产品设计 > UI/UE

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

2012-05-11 19:35 633 查看
---------------------- android培训java培训、期待与您交流!

String

在API文档中,有如下描述:

public final class String extends Object implements Serializable, Comparable<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 Serializable, CharSequence

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

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

StringBuilder

API文档中,描述如下:

public final class StringBuilder extends Object implements Serializable, CharSequence

同样不能被继承,并且其方法几乎和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();
		}


该方法中,可以讲StringBuffer类sb变成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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: