1.String
String类:代表字符串。它是一个final修饰的类,代表不可变的字符序列。字符串是常量,用双引号引起来表示,它们在创建之后不能被更改。String对象的字符内容是存储在一个字符数组value[]中的。
public final Class String implements java.io.Serializable,Compare<String>,CharSequence{
private final char value[];
}
我们常用字面量的方式来创建一个字符串,这和基本数据类型声明时形式上一样,所以经常会误认String是基本数据类型:
String s1 = "hello";
int a = 1;
声明一个字符串后,字符串值声明在字符串常量池中,字符串常量池不会存储相同内容的字符串:
String s1 = hello;
String s2 = hello;
s1 = world;
String s1 = hello;与String s2 = new String(“hello”);的区别?
2.StringBuffer类
StringBuffer代表可变字符序列,JDK1.0中声明,可以对字符串内容进行删改,此时不会产生新的对象。
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
char[] value;//没有final,可以扩容
/**
* The count is the number of characters used.
*/
int count;//记录有效字符个数
StringBuffer不同于String,其对象必须使用构造器生成:
//初始容量为16
public StringBuffer() {
super(16);
}
//构造指定容量的
public StringBuffer(int capacity) {
super(capacity);
}
//初始化为指定的字符串内容
public StringBuffer(String str) {
super(str.length() + 16);
append(str);//append方法用于字符串的拼接
}
StringBuider类和StringBuffer非常类似,均代表可变的字符串序列,而且提供的相关功能的方法也一样。
区别:
String(JDK1.0):不可变的字符串序列
StringBuffer(JDK1.0):可变的字符序列、效率低、线程安全。
StringBuilder(JDK5.0):可变字符序列、效率高、线程不安全。
作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder会改变其值。
才疏学浅,多谢指教。