String与StringBuild、StringBuffer的区别

    String与StringBuild、StringBuffer的区别相信困扰了好多新入门的JAVA程序员,而这也是笔试和面试的一道常见题型,如何全面的回答该问题,变得尤为重要。

    首先我们需要清楚一点,为什么把他们放在一起进行比较,那是因为他们都是进行字符操作的,StringBuild、StringBuffer自然不用多讲,他们的方法和功能几乎是完全等价的。

一、具体阐述

    首先说String,我们说String是不可改变的字符串,原因我们会说他是final修饰,所以不可变,那么用final修饰,会出现什么效果呢?

final关键字:

1、final关键字可以用于成员变量、本地变量、方法以及类。

2、final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。

3、你不能够对final变量再次赋值。按照Java代码惯例,final变量就是常量,而且通常常量名要大写。

4、本地变量必须在声明时赋值。

5、final方法不能被重写。

6、final类不能被继承。

  final关键字的好处:final的好处:final关键字提高了性能。JVM和Java应用都会缓存final变量。final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。使用final关键字,JVM会对方法、变量及类进行优化。

  那么String会什么要用final进行修饰呢?我们知道String在JAVA中是被高度使用的,如果String不用final修饰,那么就意味着他可以被继承,这样就有可能会降低程序的性能,参看下面的代码:

public class Test { 
    public static void main(String[] args)  { 
    //  我们常用的main方法
    } 
} 
public class String2 extends String{ 
   // 如果String 不是final 那么就可以继承 .. 
   // ... 
} 
public class Test { 
    //   那我们的 main也就可以写成
    public static void main(String2[] args)  { // 注意此处 
    //   那我们的 main也就可以写成
    } 
}

  以上是我们常用的main方法,如果不用final修饰,那么main方法里的字符串数组我们就可以自己定义,我想这也是当初JAVA设计String为final修饰的原因之一吧。

  接下来说一说StringBuffer和StringBuild:

  他们都是可变的字符序列,对于StringBuffer,他继承AbstractStringBuilder;StringBuffer,他继承继承AbstractStringBuffer,而且他的常用方法大都采用了synchronized修饰。

二、不同点:

  1、每次对String进行改变的时候进行都要创建一个新的对象,然后将指引指向该新的对象,而原来的对象在堆区中不会被销毁,原来对象中的内容会存放在堆中的常量池中。

  2、StringBuffer和StringBuilder在修改字符串的时候,是在栈区中完成的,不会创建对象。

  对于StringBuilder与StringBuffer:

  1、StringBuffer的常用方法大都采用了synchronized修饰,因此是线程安全的。

  2、StringBuilder非线程安全。

三、应用场景:

  1、如果要操作少量的数据,用String。

例:String s = "a" + "b";
  System.out.println( s == "ab" );  //  true

  2、大量数据的操作,用StringBuffer或StringBuilder

String s = "a";
  for( int i=0;i<100000;i++ ){
   s +="b";
} 
 System.out.println(s.length());//等了好久StringBuffer s = new StringBuffer("a");
  for( int i=0;i<100000;i++ ){
   s.append("b");
 } 
System.out.println(s.length()); //很快

单线程下,使用StringBuilder;多线程下,使用StringBuffer。

转载于:https://www.cnblogs.com/xullent/p/6272318.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值