`
yipbxx
  • 浏览: 57436 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

String和StringBuffer

    博客分类:
  • java
阅读更多
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)//为什么是true


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

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

相关推荐

Global site tag (gtag.js) - Google Analytics