Java学习知识点要求(11)
5 n; N g8 b8 ]5 ]16、 StringBuffer类与String的区别) t) e. _$ I+ _( ]* A
String 对一串字符进行操作。不可变类。
' D2 A! B. v5 T {; t StringBuffer 也是对一串字符进行操作,但是可变类
" \7 ^) U" q, P3 j String:是对象不是原始类型.
! G" T- u- c% r/ Y8 p6 U. D! U- g6 }为不可变对象,一旦被创建,就不能修改它的值.
+ q" e, P" w' H D对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
6 a, n# ~, c* t5 C$ K8 UString 是final类,即不能被继承.3 H7 R0 _) t @
StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象, R% D" F+ U0 w! X8 F2 z
它只能通过构造函数来建立,* B4 S" N# [1 d0 l
StringBuffer sb = new StringBuffer();7 E, D Z" i, [3 n" T7 S
note:不能通过付值符号对他进行付值. : B5 `5 N7 a, ?) \
sb = "welcome to here!";//error
' o- J- K) N% b对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer! D* I7 @( v5 L
中付值的时候可以通过它的append方法.
, }* y. d) c, ?( Q% bsb.append("hello");
; v& P. |( e* N/ u4 h字符串连接操作中StringBuffer的效率要比String高:! h/ c; Y* ]4 d. m# B- ?& }$ T1 r
String str = new String("welcome to ");
6 J: B% R9 e7 M! @# C2 estr += "here";4 x" I9 Y% Q) L' {: T3 |5 d: a
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
* `! v/ U$ a" F# @再将StringBuffer toSting();
* N3 E) m' z0 @5 T% o6 U1 _$ H" p# f这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.$ `' o6 b" d3 e h
并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.4 `, B( V0 e& N8 ]9 F
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的 |