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()方法
*/
@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());
}
}