String、StringBuffer、StringBuilder对比总结_Ubuntu_青云站长教程网
欢迎来到站长教程网!
  • 秒到短信接口 免费试用
  • 微信支付宝接口 秒结算
  • 中文网站排名|申请加入
  • 搜索引擎全站查询
  • 查询移动网站权重数据
  • 海外主机 台湾公司直销
  • Ubuntu

    当前位置:主页 > 服务器教程 > Ubuntu >

    String、StringBuffer、StringBuilder对比总结

    时间:2019-08-13|栏目:Ubuntu|点击:
  • 首先讲获得字符串对象的方式有两种,一种是直接使用字符串常量,一种是使用new关键字创建,但它们之间是有一些区别,如下运行实例:

    String s1 = new String("Hello");       
    String s2 = new String("Hello");       

    String s3 = "Hello";                   
    String s4 = "Hello";                 
     7 System.out.printf("s1 == s2 : %b%n", s1 == s2);
    System.out.printf("s3 == s4: %b%n", s3 == s4);
    System.out.printf("s1 == s3 : %b%n", s1 == s3);
    System.out.printf("s2 == s3 : %b%n", s2 == s3);

    输出结果:

    s1 == s2 : false
    s3 == s4: true
    s1 == s3 : false
    s2 == s3 : false

    从以上结果可以看出,“==”运算符比较的是两个引用是否指向相同的对象,由此可见s1和s2指向的是不同的对象,s3和s4指向了相同的对象。

    Java中的不可变字符串String常量,采用字符串池(String Pool)管理技术,字符串池是一种字符串驻留技术。采用字符串常量赋值时(见代码第4行),如下图所示,会字符串池中查找"Hello"字符串常量,如果已经存在把引用赋值给s3,否则创建"Hello"字符串对象,并放到池中。根据此原理,可以推定s4与s3是相同的引用,指向同一个对象。

    但此原理并不适用于new所创建的字符串对象,代码运行到第1行时,会创建"Hello"字符串对象,而它并没有放到字符串池中。代码第2行又创建了一个新的"Hello"字符串对象,s1和s2是不同的引用,指向不同的对象。

    String、StringBuffer、StringBuilder对比总结

    其次,String、StringBuffer、StringBuilder三者中 ,就运行速度而言,StringBuilder最高,StringBuffer次之,最后是String。造成这种情况的原因是String是由final修饰的字符串常量,而StringBuffer和StringBuilder是字符串变量,即字符串常量一旦创建之后就无法改变,(但实际应用中我们是经常在改变它的值)当我们每次改变字符串常量的时候,都会生成一个新的String对象,所以如果是经常改变内容的字符串最好不要用String字符串常量,因为每次生成对象都会对系统性能产生影响。

    而StringBuffer和StringBuilder就不同了,它们是字符串变量,创建后是可以改变的,我们每次操作的结果都是它对象本身,因此效率也会更高。

    最后,从线程安全的角度来看,StringBuilder是非线程安全的,而StringBuffer是线程安全的。因为在StringBuffer中,有很多方法是被synchronized关键字修饰的(因此也就限制了它的性能),所以如果在多线程应用时,应尽量使用StringBuffer从而保证线程安全,避免一些不必要的错误;当对线程安全没有必要的要求时,例如单线程下,可使用StringBuilder来提高系统性能。

    另外,可能有人会有疑问,既然String是final修饰类型,确可以进行重新赋值或+等操作呢?

    因为String的+操作实际是调用了StringBuffer的append方法进行,然后又通过StringBuffer的toString()操作重新赋值的。

    上一篇:Java的封装性与访问控制详述

    栏    目:Ubuntu

    下一篇:Java垃圾回收机制简述

    本文标题:String、StringBuffer、StringBuilder对比总结

    本文地址:http://www.jh-floor.com/fuwuqijiaocheng/Ubuntu/20150.html

    广告投放 | 联系我们 | 版权申明

    重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:888888 | 邮箱:888888#qq.com(#换成@)

    Copyright © 2002-2017 青云站长教程网 版权所有 琼ICP备xxxxxxxx号