zoukankan      html  css  js  c++  java
  • String, StringBuffer, StringBuilder

    1. String 类 

       String 类是属于不可变类,任何对String的操作都会引起新的String对象的产生 

       String a = "a"; //假设a指向地址0x0001 

       a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。 

       因此String的操作都是改变赋值地址而不是改变值操作 
      
    Java代码  收藏代码
    1. String S1 = “abc”;   
    2. For(int I = 0 ; I < 10000 ; I ++)  
    3. {   
    4.   S1 + = “def”;   
    5.   S1 = “abc”;   
    6. }  

       这样操作后,如果GC没有清理,内存中会产生2万个String对象 
    Java代码  收藏代码
    1. public class test2 {  
    2.   
    3.    public static void stringReplace (String text) {      
    4.         text = text.replace('j' , 'i');      
    5.     }      
    6.          
    7.     public static void main (String args[]) {    
    8.           
    9.      String textString = new String ("java");    
    10.          
    11.      stringReplace (textString);   
    12.        
    13.      System.out.print("textString="+textString); //输出Java  
    14.     }      
    15. }  

    2. StringBuffer是不可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 

       StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区 

       StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区 

       StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区 

       setCharAt 
       charAt 
       insert 
       append//添加字符串或者char型数组 
       setLength 小于长度,会截断字符串 
       substring 
       replace 
       reverse 反转 
       public void getChars(int srcBegin,//字符串中要复制的第一个字符的索引。 
                         int srcEnd,//字符串中要复制的最后一个字符之后的索引 
                         char[] dst,//目标数组 
                         int dstBegin)//目标数组中的起始偏移量 

    3. 从 JDK 5.0 开始,为StringBuffer类增添了一个单个线程使用的等价类,即 StringBuilder 。与该类相比,通常应该优先使用 

    StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 

    String StringBuffer StringBuilder 对比 
    1.jdk版本支持 
    StringBuilder JDK1.5以后版本支持 
    2.线程安全 
    StringBuffer 线程安全 
    StringBuilder 线程不安全 
    Java.lang.StringBuffer 线程安全的可变字符序列。类似于 String 的字符串缓冲区,但不能修改。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发 生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。 
    每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量 自动增大。从 JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即 StringBuilder 。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 但是如果将 StringBuilder 的实例用于多个线程是不安全的。需要这样的同步,则建议使用 StringBuffer 。 
    3.速度 

    一般情况下,速度从快到慢:StringBuilder>StringBuffer>String.当需要在循环中多次使用字符串拼接时,建 议使用StringBuilder或StringBuffer.当数量级在百万级(这里可能不准确)时,StringBuilder的速度会体现出来.


    原文地址:http://www.iteye.com/topic/411571

  • 相关阅读:
    github中,一些涉及到用户配置的文件怎么处理(比如数据库用户名/密码)?
    XMLHttpRequest cannot load file浏览器无法异步加载本地file文件
    HTML小技巧
    HTML实体符号代码速查表
    宽度不固定,水平居中
    CSS实现背景透明,文字不透明
    window.inner 兼容IE8
    div横排放置对齐问题;block,inline,inline-block区别
    IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)
    js 值和引用
  • 原文地址:https://www.cnblogs.com/bluestorm/p/2298147.html
Copyright © 2011-2022 走看看