15.StringBuilder和StringBuffer个人总结
15.1关于底层核心机制
15.1.1 关于线程安全
-
StringBuffer和StringBuilderd的append的方法是在AbstractStringBuilder中实现的,
-
StringBuffer的append方法加了synchronized。
-
StringBuffer是线程安全的但效率低,StringBuilder是线程不安全的但高效
-
其底层是字节数组
15.1.2 两者拥有相同的扩容机制 :
无参构造初始容量为:16
有参构造初始容量为:字符串参数的长度+16
有参和无参扩容方法都一样的。都是从当前容量开始扩容
15.1.3扩容的两种情况
一次追加长度超过当前容量,则会按照 当前容量*2+2 扩容一次
一次追加长度不仅超过初始容量,而且按照 当前容量*2+2 扩容一次也不够,其容量会直接扩容到与所添加的字符串长度相等的长度。之后再追加的话,还会按照 当前容量*2+2进行扩容
15.2 强调注意
!!!再者要注意,好多方法中按指定范围截取的子序列,范围基本都是取左不取右
15.3 其方法的简单调用
实现代码如下 :
public class StringBuilderTest {
public static void main(String[] args) {
//创建
StringBuilder builder = new StringBuilder();
//获得序列长度
int i = builder.length();
//返回当前容量
System.out.println(builder.capacity());//默认初始长度为16
//追加元素到末尾 append()
builder.append("nuc.");
builder.append("edu.");
System.out.println(builder); //nuc.edu.
//移除此序列的子字符串中的字符 (左闭右开)!!!
builder.delete(0,builder.length());
System.out.println(builder); //
//链式增加元素
builder.append("nuc").append(".").append("edu.");
System.out.println(builder); //nuc.edu.
//将给定的代码点参数以字符串形式附加到此延续的内容中
builder.appendCodePoint(99);
builder.appendCodePoint(110);
System.out.println(builder); //nuc.edu.cn
// setCharAt(int index, char ch) --> 将给定索引处的字符设置为 ch
builder.setCharAt(7,'!'); //注意是字符!不是所谓的字符串!!!
System.out.println(builder); //nuc.edu!cn
//insert(int offset, String str) 将 str 参数的字符串插入此序列中
builder.insert(4,"north.");
System.out.println(builder); //nuc.north.edu!cn
//replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符 (左闭右开!!!)
builder.replace(0,3,"NUC"); //实际替换的是[0,2]
System.out.println(builder); //NUC.north.edu!cn
// 返回一个新的 String
// String substring(int start)
// String substring(int start, int end)
String substring1 = builder.substring(4);
System.out.println(substring1); //north.edu!cn
String substring2 = builder.substring(4, 9);//!!!左闭右开
System.out.println(substring2); //north 实际取[4,8]
}
}
16.面向对象
16.1 面向对象与面向过程的异同
161.1相同点
面向过程和面向对象都是对软件分析、设计和开发的一种思想
16.2.2区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。即面向对象是以功能来划分问题,而不是步骤。
16.2. 面向对象的优点
16.2.1优点:
易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
即将复杂的问题简单化,更符合人们思考问题的角度。且面向过程更贴合执行者的思维方式,而面向对象更贴合管理者的思维方式。
16.2.2 缺点:
性能比面向过程低