首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

String字符串的归结总结

2012-11-14 
String字符串的归纳总结一.String和StringBuffer的区别是在那里? String[/b] ① String是不变字符串 ,为不

String字符串的归纳总结
一.String和StringBuffer的区别是在那里?
String;[/b]
① String是不变字符串 ,为不可变对象,一旦被创建,就不能修改它的值,对于已  经存在的
② String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
③ 使用String进行字符串的连接,每次对String进行赋值操作时都将生成一个新的String实例,会占用较多内存;因此在需要动态改变字符串时,用StingBuffer效率比较高.
④  String的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后
再将StringBuffer toSting();这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣. 并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.



StringBuffer:
① StringBuffer: 是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象,它只能通过构造函数来建立,如StringBuffer sb = new StringBuffer(); 
② StringBuffer的值不能通过赋值符号对他进行赋值.如sb = "welcome to  here!"
③StringBuffer的对象被建立以后,在内存中就会分配内存空间,并初始保存   一个null.向StringBuffer 中赋值的时候可以通过它的append方法. 如 sb.append("hello");
④字符串连接操作中StringBuffer的效率要比String高,的处理步骤实际上是通过建立一StringBuffer,然后调用append(),最后再将StringBuffer toSting(); 这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣. 并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.



二.比较两个字符串是否相等,如果相等,比较的是什么?如果不相等那么比较又是什么?


两字符串是否相等比较的是地址内的内容,比较的是对象,所以当比较两字符串是否相等时就用到equals(),而不用==,这就是他们的区别所在。
     我们下面来区别一下equals()和==,在比较字符型数据时,==比较的是内存中的地址,比较的是对象的句柄;而equals()比较的是地址内的内容,比较的是对象。由于JAVA中除基本数据类型外其它一切都是对象,而对象变量存储的都是引用,相当于C中的指针,所以在比较对象时如String,用==是比较两个变量是否指向同一个对象,而用equals才是比较两个String的内容是否相等。
     ==绝对比equals快。 ==是java内置的,可以理解为"相同"。对于简单类型来说,a=3,b=3,我们可以说a和b相同,也可以说a和b相等,都没什么问题。.equals()是Object的方法,可以理解为"相等"。显然两个object相等并不意味着相同;但是需要注意的是,也并不意味着他们对应内存区域的所有字节都相等,比如(但不限于这个原因)他们内部可能还有自己的引用。所以,两个对象是否相等,只有这个对象自己才知道如何判断,java并不知道。所以就需要类自己提供一个equals方法。

热点排行