String:
是对象不是原始类型
为不可变对象,一旦被创建,就不能修改它的值
对于已经存在的String对象的修改都是重新创建一个新的String对象
String 是final类,不能被继承
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
只能通过构造函数来建立
通常,可以通过下面的语法创建一个String对象
String str="hello here";
或者也可以使用这样的语法
String str=new String("hello here");
在创建一个StringBuffer对象时,我们不能使用第一种方式,因为它的右边是一个String对象,而左边是一个StringBuffer对象,两者的类型不匹配。
StringBuffer sb = new StringBuffer();
sb = "hello here";//错误,类型不匹配
可以通过下面的方式创建一个空字符串:
String str="";
或者也可以使用这样的形式:
String str=new String();
如果需要创建一个空的StringBuffer对象,可以使用
StringBuffer sf = new StringBuffer();
或者
StringBuffer sf = new StringBuffer("");
当创建String对象时,可以使用一个非空的初始化字符串。编译器为这个对象所分配的内存就是存储这些字符所需要的内存空间。比如,String类型字符串str="hello there",调用str.length()获得其长度为11。
当我们初始化StringBuffer对象时,系统为它分配的内存比字符串实际所需要的内存空间多出16个字符。这是为了削除当我们对这个字符串对象进行修改时由于添加少量字符而导致的内存分配开销。可以通过capacity()方法获得StringBuffer对象的容量。StringBuffer str="hello there",调用length()获得其长度为11,调用capacity()可获得其容量为27.
可以通过StringBuffer的构造函数来设定它的初始化容量,这样可以明显地提升性能。这里提到的构造函数是StringBuffer(int length),length参数表示当前的StringBuffer能保持的字符数量。也可以使用ensureCapacity(int minimumcapacity)方法在StringBuffer对象创建之后设置它的容量。首先我们看看StringBuffer的缺省行为,然后再找出一条更好的提升性能的途径。StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候,因为没有设置初始化字符长度,StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大容量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值+2)。
如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第16个字符的时候它会将容量增加到34(2*16+2),当追加到34个字符的时候就会将容量增加到70(2*34+2)。无论何事只要StringBuffer到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍——这也太昂贵了点。所以总是给StringBuffer设置一个合理的初始化容量值是错不了的,这样会带来立竿见影的性能增益。
使用一个合适的容量值来初始化StringBuffer永远都是一个最佳的建议。
以上为整理网络资料而得
非原创
是对象不是原始类型
为不可变对象,一旦被创建,就不能修改它的值
对于已经存在的String对象的修改都是重新创建一个新的String对象
String 是final类,不能被继承
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
只能通过构造函数来建立
通常,可以通过下面的语法创建一个String对象
String str="hello here";
或者也可以使用这样的语法
String str=new String("hello here");
在创建一个StringBuffer对象时,我们不能使用第一种方式,因为它的右边是一个String对象,而左边是一个StringBuffer对象,两者的类型不匹配。
StringBuffer sb = new StringBuffer();
sb = "hello here";//错误,类型不匹配
可以通过下面的方式创建一个空字符串:
String str="";
或者也可以使用这样的形式:
String str=new String();
如果需要创建一个空的StringBuffer对象,可以使用
StringBuffer sf = new StringBuffer();
或者
StringBuffer sf = new StringBuffer("");
当创建String对象时,可以使用一个非空的初始化字符串。编译器为这个对象所分配的内存就是存储这些字符所需要的内存空间。比如,String类型字符串str="hello there",调用str.length()获得其长度为11。
当我们初始化StringBuffer对象时,系统为它分配的内存比字符串实际所需要的内存空间多出16个字符。这是为了削除当我们对这个字符串对象进行修改时由于添加少量字符而导致的内存分配开销。可以通过capacity()方法获得StringBuffer对象的容量。StringBuffer str="hello there",调用length()获得其长度为11,调用capacity()可获得其容量为27.
可以通过StringBuffer的构造函数来设定它的初始化容量,这样可以明显地提升性能。这里提到的构造函数是StringBuffer(int length),length参数表示当前的StringBuffer能保持的字符数量。也可以使用ensureCapacity(int minimumcapacity)方法在StringBuffer对象创建之后设置它的容量。首先我们看看StringBuffer的缺省行为,然后再找出一条更好的提升性能的途径。StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候,因为没有设置初始化字符长度,StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大容量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值+2)。
如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第16个字符的时候它会将容量增加到34(2*16+2),当追加到34个字符的时候就会将容量增加到70(2*34+2)。无论何事只要StringBuffer到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍——这也太昂贵了点。所以总是给StringBuffer设置一个合理的初始化容量值是错不了的,这样会带来立竿见影的性能增益。
使用一个合适的容量值来初始化StringBuffer永远都是一个最佳的建议。
以上为整理网络资料而得
非原创