Java中String 和StringBuffer的区别

先看下面的这个例子,读懂这个例子,你就理解了。

publicclass Test {

publicstaticvoid stringReplace (String text) {

text = text.replace('j' , 'i');

}

publicstaticvoid bufferReplace (StringBuffer text) {

text = text.append("C");

}

publicstaticvoid 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。

对于这样能不能面试出真正的水平,感到怀疑。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

String str=new String("HELLO");

String str="HELLO";

以上的区别请说明以下

String str=new String("HELLO");创建了两个对象,一个是"HELLO",然后再用"HELLO"创建一个str引用的对象.

下面的就在创建"HELLO"之后把str指向"HELLO",这样只创建了一个String的实例

~~~~~~~~~~~~~~~~~~~~~~~~~

因此得到的结论是:如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法好了!

也许这就是你的程序的性能瓶颈!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

非可变对象一旦创建之后就不能再被改变,可变对象则可以在创建之后被改变。

String对象是非可变对象,StringBuffer对象则是可变对象。

为获得更佳的性能你需要根据实际情况小心谨慎地选择到底使用这两者中的某一个

(0)

相关推荐

  • java中抽象类和接口的区别

    java中抽象类和接口的区别是什么?java 抽象类和java接口类有什么区别?java中抽象类与接口有哪些区别?Java中抽象类和接口的区别?Java中抽象类与接口有什么区别?Java中抽象类与接口 ...

  • Java中 a++ 和 ++a 的区别

    JAVA是一种开发代码语言,那么JAVA中的a++和++a有什么区别呢? 操作方法 01 先说说两者之间的共同点,不管是a++还是++a,在编辑代码的时候都是运用a+1的代码进行编程的. 02 说说两 ...

  • java 中堆和栈的区别方法

    一直以来对java中堆和栈都有点模糊:现在终于搞明白啦 特点: 1. 栈的特点是 : 容量小 速度快 适合存放小型数据 如基本数据类型和对象类型的引用 在栈中变量直接指向存放变量值的空间 对于对象引用 ...

  • java中nextLine()和next()的区别

    在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单.在写作业的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(), ...

  • C++、C、Java中回车与换行的区别与联系

    回车.换行平时简写为<CR>.<LF>,然而我们常提及到回车与换行却没有注意两者的具体区别. 具体来说操作系统不同,回车与换行的意义各不相同. 一.windows 01 回车( ...

  • java中equal与==的区别

    介绍一下java中==和equals方法的区别.在初学java时需要弄清楚这个问题,以免在今后在编码过程中出现一些低级错误. 操作方法 01 首先,在eclipse中运行图示所示代码,通过结果对&qu ...

  • string、stringBuffer、stringBuilder区别

    string.stringBuffer.stringBuilder区别的简单介绍 操作方法 01 1.先介绍三者的相同之处:都可用于存储字符串,但是在存储的过程中又有不同之处:string只能存放不可 ...

  • Java中final、finally、finalize的区别

    Java中final.finally.finalize的区别与用法,困扰了不少学习者,下面我们就这个问题进行一些探讨,希望对大家的学习有所帮助. 操作方法 01 简单区别: final用于声明属性,方 ...

  • Java中如何将String字符串去掉前后空格

    java中的String对象有很多常用的方法,如果用好了,对以后的编程有着很大的重用 操作方法 01 首先直接说明,去掉String字符串前后空格用到的方法是 String trim(); 调用这个方 ...