A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Captain_Jack_Sp 于 2013-8-23 21:52 编辑

求教中?????

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
用StringBuffer速度比较快,创建的对象少.
如果是单线程的话还可以考虑用StringBuilder 这样速度更快.
回复 使用道具 举报
Character类 ,String类,StringBuffer类,StringBuilder类
   
在java中有主要有4个类来负责字符及字符串的操作。
1. Character 是对单个字符操作的
2. String 是对象不是基本数据类型,字符串是一个特殊的对象。字符串一旦初始化就不可以被改变。
             (数据内容不能变,不是说字符串的引用不能变).
             对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
             String 是final类,即不能被继承.

3. StringBuffer 也是对一串字符进行操作,但是可变类。
   是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
   它只能通过构造函数来建立,StringBuffer sb = new StringBuffer();
   不能通过赋值符号对他进行赋值. sb = "welcome to here!"; //error
   对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
   中付值的时候可以通过它的append方法.sb.append("hello");
   字符串连接操作中StringBuffer的效率要比String高:
   String str = new String("welcome to ");
   str += "here";
   的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
   再将StringBuffer toSting();
   这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
   并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
   这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.  
   (2) 下面的s和s2的区别:
    String s = new String("abc"); 在创建s的时候,有两个对象被创建。
    String s2 = "abc"; 在创建s2的时候,有一个对象被创建。
    直接赋值字符串常量是直接拿字符串常量池里面的值。                    
    (3) StringBuffer和StringBuilder:
    字符串的组成原理就是通过该类实现的。是字符串缓冲区类。是一个容器。
    字符串是固定的,StringBuffer可以对字符串内容进行增删,是可变长度的。
    而且通过测试可知道的它容量的变化 (上次的容量*2+2)
    StringBuffer是一个容器。很多方法与String相同。
    StingBuffer是可变长度的,JDK1.5出现一个StringBuilder,方法完全一样.
    构造方法:
        StringBuffer():默认容量16
        StringBuffer(int capacity): 指定容量capacity
        StringBuffer(String str): 默认容量16+str.length()
    (4) String和StringBuffer的相互转换
        String --> StringBuffer
            StringBuffer buffer = new StringBuffer(String str);
            StringBuffer buffer = new StringBuffer();
            buffer.append(String str)
        StringBuffer --> String
            String s = new String(StringBuffer buffer);
            String s = buffer.toString();
    (5) 区别是StringBuffer是同步的,StringBuilder是非同步的。













回复 使用道具 举报
总结: 如果在程序中需要对字符串进行频繁的修改连接操作的话.
多线程情况下使用StringBuffer或者单线程情况下使用StringBuilder性能会更高
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马