---------------------- 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培训、期待与您交流! ----------------------
本文详细介绍了Java中String、StringBuffer与StringBuilder的特性与用法,包括它们的区别、实现方式及如何在实际场景中合理选择使用。特别展示了通过自定义方法模仿String类的部分方法实现,提供了深入的实践案例。

940

被折叠的 条评论
为什么被折叠?



