« | October 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9718188 建立时间:2004年12月20日 |

| |
[java语言]string和stringbuffer区别 原创空间, 软件技术
邢红瑞 发表于 2006/2/18 17:09:44 |
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这是String参数传递,是不可变的(immutable).
而题目中第七行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)//为什么是trueStringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,而Object类中的equals方法是用来比较地址的,所以等于false.
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以会是true。对于这样能不能面试出真正的水平,感到怀疑。 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
datebao(游客)发表评论于2010/6/14 20:34:50 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
3w(游客)发表评论于2010/4/13 14:35:24 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
hh(游客)发表评论于2009/7/1 0:02:27 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
hehe(游客)发表评论于2007/11/13 17:00:31 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
秦明(游客)发表评论于2007/7/30 18:20:25 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
游者20070730(游客)发表评论于2007/7/30 12:34:24 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
ewq(游客)发表评论于2006/12/20 16:55:12 |
以下引用jk(游客)在2006-4-12 9:51:35的评论:
以下引用ligangman(游客)在2006-3-31 14:23:31的评论:
String str=new String("HELLO");
String str="HELLO";
以上的区别请说明以下
String str=new String("HELLO");创建了两个对象,一个是"HELLO",然后再用"HELLO"创建一个str引用的对象.
下面的就在创建"HELLO"之后把str指向"HELLO",这样只创建了一个String的实例 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
守护(游客)发表评论于2006/10/17 11:32:33 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
Null(游客)发表评论于2006/4/29 17:19:10 |
|
回复:string和stringbuffer区别 原创空间, 软件技术
jk(游客)发表评论于2006/4/12 9:51:35 |
以下引用ligangman(游客)在2006-3-31 14:23:31的评论:
String str=new String("HELLO");
String str="HELLO";
以上的区别请说明以下
String str=new String("HELLO");创建了两个对象,一个是"HELLO",然后再用"HELLO"创建一个str引用的对象.
下面的就在创建"HELLO"之后把str指向"HELLO",这样只创建了一个String的实例 |
|
|