string和stringbuffer区别(转)
2007-07-24 08:56:13
关于string和stringbuffer的区别,一直是面试的重点哦,这里转自刑红瑞的一篇BLOG,简单而清晰讲了其区别,收藏之,原文来自http://blogger.org.cn/blog/more.asp?name=hongrui&id=11880 本文出自 51CTO.COM技术博客string和stringbuffer区别
这是好友面试的一道题,其实我知道使用的区别,StringBuffer必须new出来,StringBuffer的append的效率比string的+=的效率高, 其实发现还有很大的区别,看了看以前scjp的考题 public class Test { public static void stringReplace (String text) { text = text.replace('j' , 'i'); } public static void bufferReplace (StringBuffer text) { text = text.append("C"); } public static void main (String args[]) { String textString = new String ("java"); StringBuffer textBuffer = new StringBuffer ("java"); stringReplace (textString); bufferReplace (textBuffer); System.out.println (textString + textBuffer); } } 答案是 javajavaC 这是Java参数传递(by value)造成的 而题目中第七行text = text.append (“C”),append方法会改变text中的值 而这个text与main中的textBuffer是指向同一个对象,所以对应的输出是javac。 string的值永远不会改变! String a = "a";//假设a指向地址0x0001, a = "b";//重新负值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的。 从表面上看String类型的对象改变了值,但事实是他不能改变值,只能改变指向的地址 StringBuffer则不同,直接改变指向的地址中保留的值 还有 StringBuffer s1 = new StringBuffer("a"); StringBuffer s2 = new StringBuffer("a"); s1.equals(s2)//为什么是false String s1 = new String("a");
String s2 = new String("a"); s1.equals(s2)//为什么是true StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, 而Object类中的equals方法是用来比较地址的,所以等于false. String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以会是 true。 对于这样能不能面试出真正的水平,感到怀疑。 |


soly
博客统计信息
热门文章
最新评论
友情链接