一、 String
(1) String s1 = "abc";
(2) String s2 = new String("abc");
(1)与(2)与有何不同?两者分别产生了几个对象?
答:“abc”是存在字符串常量区的,当常量区中没有对应的字符串时,就创建相应的字符串。s1和s2都是引用,保存在栈内,当执行new String("abc")操作时,会从字符串常量区拷贝”abc“到堆中,每new一次,就会在堆中产生一个字符串对象。因此,当分别用上述两种方式创建字符串对象引用时,(1)中会在字符串常量区产生一个"abc"对象,然后栈中的s1就会指向它。(2)中会会在字符串常量区产生一个"abc"对象,同时,由于new操作,会在堆内存中复制一份"abc"对象,然后栈内的s2就会指向堆内存的对象,共产生两个对象。
二、StringBuffer
StringBuffer是字符串缓冲区。
是一个容器。特点:
1,长度是可变化的。
2,可以字节操作多个数据类型。
3,最终会通过toString方法变成字符串。
1,存储。
StringBuffer append():将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,数据):可以将数据插入到指定index位置。
2,删除。
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。
3,获取。
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
4,修改。
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;
5,反转。
StringBuffer reverse();
6,
将缓冲区中指定数据存储到指定字符数组中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
JDK1.5 版本之后出现了StringBuilder.
StringBuilder是线程不同步。
建议使用StringBuilder