一、String类和StringBuffer类所属于的包
两个类都属于java.lang包下,此包由系统默认导入,因此可直接使用。
java.lang
类 String
java.lang.Object java.lang.String
public final class String //最终类,不能被继承 extends Object implements Serializable, Comparable< String>, CharSequence
java.lang
类 StringBuffer
java.lang.Object java.lang.StringBuffer
public final class StringBuffer //最终类,不能被继承 extends Object implements Serializable, CharSequence
二、两个类的比较
1.String类定义的字符串不能改变,StrignBuffer定义的字符串内容可改变;
2.StringBuffer定义的字符串发生变化后,用toString()方法转换成String类,随后,可使用String类下的所有方法进行操作。
三、常用方法
1.String类中常用的方法定义
构造方法:
String(byte[] bytes) 把字节数组转换为String类型
String(byte[] bytes, int offset, int length) 把字节数组转换为String类型,
bytes
- 要解码为字符的字节
offset
- 要解码的首字节的索引
length
- 要解码的字节数
String(StringBuffer buffer)
把字符串缓冲区的内容复制成一个String类型的字符串
一般方法:
public boolean equals(Object anObject)
public byte[] getBytes(String charsetName) throwsUnsupportedEncodingException 把String类型的对象转换为byte数组
public int length() 返回此字符串的长度。
public StringtoString() 返回此对象本身(它已经是一个字符串!)。
static String | valueOf(boolean b) 返回boolean 参数的字符串表示形式。 |
static String | valueOf(char c) 返回char 参数的字符串表示形式。 |
static String | valueOf(char[] data) 返回char 数组参数的字符串表示形式。 |
static String | valueOf(char[] data, int offset, int count) 返回char 数组参数的特定子数组的字符串表示形式。 |
static String | valueOf(double d) 返回double 参数的字符串表示形式。 |
static String | valueOf(float f) 返回float 参数的字符串表示形式。 |
static String | valueOf(int i) 返回int 参数的字符串表示形式。 |
static String | valueOf(long l) 返回long 参数的字符串表示形式。 |
static String | valueOf(Object obj) 返回Object 参数的字符串表示形式。 |
2.StringBuffer中常用的方法定义
构造方法:
public StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
public StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。该字符串的初始容量为 16
加上字符串参数的长度。
一般方法:
public String toString() 返回此序列中数据的字符串表示形式。
public int length() 返回长度(字符数)。
public int capacity() 返回当前容量。由于StringBuffer处置容量为16,此方法最终返回值为16+new String().length()
StringBuffer | append(boolean b) 将 boolean 参数的字符串表示形式追加到序列。 |
StringBuffer | append(char c) 将 char 参数的字符串表示形式追加到此序列。 |
StringBuffer | append(double d) 将 double 参数的字符串表示形式追加到此序列。 |
StringBuffer | append(float f) 将 float 参数的字符串表示形式追加到此序列。 |
StringBuffer | append(int i) 将 int 参数的字符串表示形式追加到此序列。 |
StringBuffer | append(long lng) 将 long 参数的字符串表示形式追加到此序列。 |
StringBuffer | append(String str) 将指定的字符串追加到此字符序列。 |
四、示例
1.在String类中使用“==”和equals方法(重要)
class StringDemo
{
public static void main(String[] args)
{
String str1 = "abcd";
String str2 = "abcd";
String str3 = new String("abcd");
String str4 = new String("abcd");
String str5 = str2;
System.out.println(str1 == str2); //true
System.out.println(str2 == str3); //false
System.out.println(str3 == str4); //false
System.out.println(str2 == str5); //true
System.out.println(str1.equals(str2)); //true
System.out.println(str2.equals(str3)); //true
System.out.println(str3.equals(str4)); //true
System.out.println(str2.equals(str5)); //true
}
}
结果已标出。
小结:
String直接定义的字符串字面值(String str1 = "abcd";)存在于字符串数据区String Poor中,进行定义时先查询String Poor内有没有此字符串,若有,直接把字符串的地址赋值给当前字符串变量;若没有,先在String Poor里生成字符串,再把地址赋值给当前字符串变量;
通过引用定义的字符串变量(String str3 = new String("abcd");)在定义时,首先查询String Poor有没有此字符串,若有,复制一份存在堆内存空间,并把地址赋值给栈中的引用;若无,先在String Poor里生成字符串,再复制一份到堆内存空间,并把地址赋值给当前引用;
2.在StringBuffer类中使用append()方法,在String类中使用“+”连接符
class StringDemo
{
public static void main(String[] args)
{
StringBuffer str1 = new StringBuffer("abcd");
str1.append(true).append(false);
str1.append(1);
str1.append("a");
str1.append(1.0);
str1.append(2.0f);
String str2 = str1.toString();
System.out.println(str2);
str2 += "lpp"+6+"f";
System.out.println(str2);
}
}
结果:abctruefalse1a1.02.0
abctruefalse1a1.02.0lpp6f
3.在StringBuffer类中使用String类的方法
class StringDemo
{
public static void main(String[] args)
{
StringBuffer str1 = new StringBuffer("abcd");
str1.append(true).append(false);
str1.append(1);
str1.append("a");
str1.append(1.0);
str1.append(2.0f);
String str2 = str1.toString();
//使用String类中的方法
System.out.println(str2);
System.out.println(str2.intern());
System.out.println(str2.length()); // 21
System.out.println(str2.indexOf("abcd")); // 0
}
}
小结:
使用toString方法把StringBuffer类转换为String类,就可以使用String类定义的方法了。
4.在StringBuffer类中使用capacity方法
class StringDemo
{
public static void main(String[] args)
{
StringBuffer str = new StringBuffer("abcd");
System.out.println(str.length()); // 4
System.out.println(str.capacity()); // 20
}
}
结果已标出。
小结:
length()方法返回的是字符串的长度,capacity()方法返回的是字符串所在缓冲区的容量。