5.1 String类
String类表示字符串,Java 程序中的所有字符串都作为此类的对象。String类不是基本数据类型,它是一个类。因为对象的初始化默认值是null,所以String类对象的初始化默认值也是null。String是一种特殊的对象,具有其他对象没有的一些特性。
String字符串是常量,字符串的值在创建之后不能更改。
String类是最终类,不能被继承。
String类的概念
首先要定义并初始化字符串。String类包括以下常用的构造方法。
- String(String s):初始化一个新创建的String对象,使其表示一个与参数相同的字符序列。
- String(char[] value):创建一个新的String对象,使其表示字符数组参数中当前包含的字符序列。
- String(char[] value, int offset, int count):创建一个新的String对象,它包含取自字符数组参数的一个子数组的字符序列。offset参数是子数组第一个字符的索引(从0开始建立索引),count 参数指定子数组的长度。
String stuName0 = "王云";
String stuName1 = new String("王云");
char[] charArray = {'刘','静','涛'};
String stuName2 = new String(charArray);
String stuName3 = new String(charArray,1,2);//从'静'字开始,截取2个字符,结果是“静涛”
在实际编程过程中,需要在一个字符串后面增加一些内容, String类提供了一个concat(String str)的方法,可以在String类字符串后面增加字符串。
class TestString2
{
public static void main(String[] args)
{
String stuName1 = new String("王云");
stuName1.concat("同学");
System.out.println(stuName1);//输出结果是“王云”,而不是“王云同学”
}
}
字符串的值在创建之后不能更改。concat(String str)方法的输出是,创建了一个新String字符串,用来存stuName1字符串加上“同学”的结果,而不是在原来stuName1字符串的后面增加内容,对于stuName1而言,它是常量,内容并没有变化。所以,如果想输出“王云同学”,可以将stuName1.concat(“同学”)表达式的结果赋给一个新的字符串,然后再输出该字符串即可。
class TestString3 {
public static void main(String[] args) {
String stuName1 = new String("王云");
System.out.println(stuName1);//王云
stuName1 = "刘静涛";
System.out.println(stuName1);//刘静涛
}
}
不是说String字符串是不可变的常量吗?怎么两次输出stuName1,却发生变化了呢?究其原因,主要是这里说的不可变是指在堆内存中创建出来的String字符串不可变。事实上,stuName1 = “刘静涛”;语句已经新创建了一个String字符串,并让stuName1指向了这个新的String字符串,原来存放“王云”的这个String字符串没有发生变化。
String类的使用
连接字符串
采用public String concat(String str)方法连接字符串。事实上,采用最多的方法是使用“+”进行String字符串连接.
public class TestStringConcat {
public static void main(String[] args) {
//使用"+"进行字符串连接
String s1 = "您好";
s1 = s1 + ",蒋老师!";//创建一个新字符串用来连接两个字符串,并让s1指向这个新字符串
System.out.println(s1);//您好,蒋老师!
//使用public String concat(String str)方法连接
String s2 = "您好";
//创建一个新字符串用来连接两个字符串,但没有变量指向这个新字符串
s2.concat(",田老师!");
//创建一个新字符串用来连接两个字符串,并让s3指向这个新字符串
String s3 = s2.concat(",田老师!");
System.out.println(s2);//您好
System.out.println(s3);//您好,田老师!
}
}
比较字符串
比较字符串常用的两个方法是运算符“==”和String类的equals方法。
使用“==”比较两个字符串,是比较两个对象的地址是否一致,本质上就是判断两个变量是否指向同一个对象,如果是则返回true,否则返回false。
而String类的equals方法则是比较两个String字符串的内容是否一致,返回值也是一个布尔类型。
public class TestStringEquals {
public static void main(String[] args) {
String s1 = "Java基础";
String s2 = "Java基础";
System.out.println(s1 == s2); //返回true
System.out.println(s1.equals(s2));//返回true
String s3 = new String("前端技术");
String s4 = new String("前端技术");
System.out.println(s3 == s4); //返回false
System.out.println(s3.equals(s4));//返回true
}
}