String、StringBuffer与StringBuilder之间区别

String、StringBuffer与StringBuilder之间区别

package sun.rain.amazing;

import org.junit.Test;

/**
 * String、StringBuffer与StringBuilder之间区别
 * 
 * 主要是对字符串内容可变的操作进行相应的方法操作
 *   针对于 String 和 StringBuffer 和 StringBuilder
 *    一些方法的应用 及其之间的区别
 * @author sunRainAmazing
 * 
 */
public class StringChange {

    /**
     * 1、String类对象为不可变对象,一旦你修改了String对象的值,
     *          隐性重新创建了一个新的对象,释放原String对象,
     *          StringBuffer类对象为可修改对象,可以通过append()方法来修改值
     * 2、String类对象的性能远不如StringBuffer类。
     * 
     *===================================
     * 
     * String 是final类,即不能被继承. 为不可变对象,一旦被创建,就不能修改它的值.
     * 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
     * 
     * 是一个可变对象,它只能通过构造函数来建立,
     * StringBuffer stringBuffer = new StringBuffer();
     * StringBuffer stringBuffer = new StringBuffer(String str);
     * 
     * 注意:不能通过赋值符号对他进行赋值. 
     *      stringBuffer = "welcome to here!";//error
     * 
     * 对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
     * 中赋值的时候可以通过它的append方法.
     * stringBuffer.append("hello");
     * 字符串连接操作中StringBuffer的效率要比String高:
     * 
     * ==================================
     * 
     * 将stringBuffer  转为 String 类型 
     *      1. 直接进行调用 toString()方法即可 
     *      2. 直接拼接 stringBuffer + ""
     *      3. 使用 String.valueOf(stringBuffer);
     */



/**
 * ================================
 * 
 *    1.在执行速度方面的优劣   StringBuilder >  StringBuffer  >  String
 *          String:字符串常量  ----是不可变的常量 final 修饰的  内容一旦创建不可改变
 *          StringBuffer、StringBuilder:字符串常量   -----内容是可变的,一个对象
 * 
 *    2.String类型的变量一旦改变内容,实质是另外创建了一个对象,将变量所对应的物理地址重新引用
 *
 *          String str = "内容创建,物理地址不可变";
 *          str = str+"内容改变或拼接效果";//实际上是重新创建了一个物理地址  重新引用
 *          System.out.print(str);// 这里的str 不再是 指向最初创建的那个物理地址。
 * 
 *    3.String 类重写了equals方法  ,而StringBuffer没有重写equals方法
 *    
 *    4.StringBuilder:线程非安全的、StringBuffer:线程安全的
 *    对于三者使用的总结: 
 *          1.对于String类型的数据 ,判断字符串内容是否相等, 操作少量的数据
 *          2.StringBuilder:主要用于单线程的多数据字符串的操作,线程不安全
 *          3.StringBuffer:主要用于多线程操作字符串,线程安全
 *    
 * ================================
 */



    /**
     * 可变字符串和不可变字符串的操作的方法  
     *      substring()
     * 给出字符串的两个位置,pos1和pos2, 如何替换pos1和pos2之间的字串
     *      用subString , String.substring(0,pos1)
     *                          + newString
     *                          + String.substring(pos2+1)
     * 
     * StringBuffer类为可变字符串的修改提供了3种方法,在字符串中间插入和改变某个位置所在的字符。
     *      1.在字符串后面追加:用append()方法将各种对象加入到字符串中。
     *      2.在字符串中间插入:用insert()方法。
     *      3.改变某个位置所在的字符,用setCharAt()方法
     */

    //将tomcat 换成 Maria
    @Test
    public void testChangeString(){
        String replaceStr = "tomcat";

        String str = "欢迎您"+ replaceStr +"来到WEB世界";
        //获取第一个截取的长度
        int index = str.indexOf(replaceStr);
        //获取第二个截取的长度
        int length = index + replaceStr.length();

        String newStr = "Maria";
        str = str.substring(0, index)+newStr+str.substring(length+1);
        System.out.println(str);
    }



    @Test
    public void testStringBufferInsert(){
        String str = "欢迎您来到WEB世界";
        StringBuffer stringBuffer = new StringBuffer(str);
        String newStr = "Maria";
        stringBuffer.insert(str.indexOf("您")+1, newStr);
        System.out.println(stringBuffer.toString());
    }




}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值