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\

  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/wwdxf/p/6432187.html
Copyright © 2011-2022 走看看