zoukankan      html  css  js  c++  java
  • java中String&StringBuffer&StringBuilder

    1.

    String,字符串常量

    StringBuffer,字符串变量(线程安全)

    StringBuilder,字符串变量(非线程安全)

    2.String and StringBuffer

      String和StringBuffe的主要区别在于String是不可变对象,每次对String进行改变的时候其实 等于生成了一个新的String对象,因此经常改变内容的字符串不要使用String类型,因为每次形成新的对象都会对系统的性能产生影响,特别当内存中的无引用的对象多了之后,JVM的GC就会开始工作,那速度一定会相当慢的.

      StringBuffer每次的操作都是针对自身来进行操作,而不是形成新的对象,再改变对象的引用,所以在一般情况下推荐使用StringBuffer,特别是字符串对象经常改变的情况下.而在某些特别的情况下,String对象的字符串拼接其实是被解释成了StringBuffer对象的拼接,所以这些时候String对象的速度并不比StringBuffer慢,而特别是以下字符串对象的形成过程中,String的效率是要比StringBuffer快的:

    String s1 = 'This is only a' + 'simple' + 'test';

    StringBuffer buffer = new StringBuffer('this is only a').append('simple').append('test');

    因为在JVM眼中,String s1 = 'This is only a' + 'simple' + 'test' ,其实就是String s1 = 'This is only a simple test';

    但如果是这样的话:
    String s2 = 'This is only a';

    String s3 = 'simple';

    String s4 = 'test';

    String s1 = s2+s3+s4;

    这个时候JVM就会按照原来的方式去做,

    在大部分情况下:StringBuffer>String

    3.StringBuffer

      java.lang.StringBuffer线程安全的可变字符序列,一个类似于String的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某种方法调用可以改变该序列的长度和内容.

      可将字符串缓冲区安全的用于多个线程.可以在必要的时候对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与调用该方法的线程的执行顺序一致.

      StringBuffer上的主要操作时append和insert操作,可重载这些方法,以接受任意的数据类型,每个方法都能有效的将给定的数据转换为字符串,然后将该字符串追加或者插入到字符缓冲区中去

    4.StringBuilder

      java.lang.StringBuilder线程非安全的可变字符串序列,是5.0新增的.此类提供一个与StringBuffer兼容的API,但不保证同步 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候,如果可能,简易优先采用该类,因为在大多数时候,StringBuilder要比StringBuffer要快,两者的方法基本相同.

    5\

  • 相关阅读:
    Smartform中表(table)的行间距设置
    ◆◆0Smartform中如何设置背景阴影色(Shading)
    ◆◆0如何在Smartforms中设置左右对齐
    如何在smartform中设置行间距
    ◆◆0如何在smartform中的table节点插入分页
    ◆◆0如何翻译smartform中的Text module
    如何在smartforms中插入复选框(checkbox)
    ◆◆0选择屏幕-SELECTION-SCREEN(一)
    科研呢喃-2
    遇到杠精,浪费时间
  • 原文地址:https://www.cnblogs.com/wwdxf/p/6432187.html
Copyright © 2011-2022 走看看