如何学好java

如何学好java,其实很简单,只要用心体会,慢慢积累!
posts - 106, comments - 7, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

StringBuffer与String的区别

Posted on 2011-05-03 16:02 哈希 阅读(202) 评论(0)  编辑  收藏 所属分类: java 代码

string和stringbuffer区别
这是好友面试的一道题,其实我知道使用的区别,StringBuffer必须new出来,StringBuffer的append的效率比string的+=的效率高,
其实发现还有很大的区别,看了看以前scjp的考题

Test


答案是 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则不同,直接改变指向的地址中保留的值
还有

public static void main(String[] args) {
        StringBuffer s1 
= new StringBuffer("a");
        StringBuffer s2 
= new StringBuffer("a");
        s1.equals(s2);
//为什么是false
        System.out.println(s1.equals(s2));
        String s3 
= new String("a");
        String s4 
= new String("a");
        s3.equals(s4);
//为什么是true
        System.out.println(s3.equals(s4));
    }
   


StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
而Object类中的equals方法是用来比较地址的,所以等于false.

String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以会是
true。


只有注册用户登录后才能发表评论。


网站导航: