静态固定序列String:
1、String字符串定义:
String s = new String("abc");
创建了两个String对象,第一个是"abc",第二个创建了新的对象,并将“abc”传入构造函数。这样没有必要,且降低了性能。String s = "abc";
2、String字符串连接(生成另一个新的字符串):
(1)concat函数。exp:"a".concat("b");
(2)+连接。exp:"a"+"b";
3、String字符串对象不可改变性,长度、内容等等。
动态可变序列StringBuffer、StringBuilder:
StringBuffer
1、StringBuffer定义:
StringBuffer sb = new StringBuffer(~);//参数含诸多类型
2、添加字符串+转换成String对象
sb.append("~").toString();//还有insert(长度,插入字符)
3、线程安全,多线程适用
StringBuilder
1、StringBuilder定义:
StringBuilder sb = new StringBuilder(~);//参数含诸多类型
2、添加字符串+转换成String对象
sb.append("~").toString();//还有insert(长度,插入字符)
3、线程不安全,单线程适用速度快
执行速度上:StringBuilder>StringBuffer>String;对象上:StringBuilder和StringBuffer是可变对象,基于同一对象操作;String则需另外创建对象。
String的性能特别关键。为了最小化内存的消耗,String类使用了一个字符池。主要思想:若两个String对象包含了相同的字符,那么这些字符共享同样的内存空间(字符池)。字符池实现了享元(Flyweight)设计模式。享元模式基于分享,目标是有效地处理大量的细粒度的对象。故必须用equals方法比较字符串对象。