第九章《字符串》第1节:String类的几个基本常识

时间:2022-12-31 15:59:49

​一串连续的字符被称为字符串。为了与程序中的变量名相区别,字符串的两端都会加上双引号,所以在程序中如果出现了“abc”,那么它就代表一个字符串而不是一个变量的名称。被双引号引起来的一串字符也被称为“字符串常量”,例如“abc”就是一个字符串常量。在实际开发过程中,绝大多数情况下程序员都会用String类的对象来表示字符串,本小节就重点介绍几个关于String类的基本常识。

(一)每个字符串常量都是String类的对象​

在Java程序中每个字符串常量都是String类的对象。既然它是String类的对象,就可以通过这个对象直接调用String类中定义的方法。下面的【例09_01】就很好的展示了这个特性:​

【例09_01 字符串常量是String类对象】

Exam09_01.java​

public class Exam09_01 {
public static void main(String[] args) {
int len = "abcde".length();//①
String str = "xyz";//②
}
}

【例09_01】中的“abcde”和“xyz”都是字符串常量,它们同时也都是String类的对象,所以语句①中“abcde”可以直接调用String类所定义的length()方法,而在语句②中,能够使用String类的引用str直接指向字符串常量“xyz”。​

(二) String类的对象可以通过加号直接完成拼接​

String类的对象可以通过加号直接完成拼接,并且拼接的结果也是一个String类对象。各位读者对于这个常识应该不陌生,在本书前面章节中也经常见到字符串的这种拼接方式。Java语言中并不是所有类都能够支持加法运算符,例如同样用来表示字符串的StringBuffer就不支持加法运算符,如图9-1所示:​

第九章《字符串》第1节:String类的几个基本常识

图9-1 用加号拼接StringBuffer类对象​

虽然StringBuffer类对象不能用加法完成拼接,但如果在最前面加上一个String类对象就能完成拼接,如图9-2所示:​

第九章《字符串》第1节:String类的几个基本常识

图9-2 以String类对象开头进行拼接​

从图中可以看到:在最前面加上一个String类对象“str”后,拼接操作就不会出现语法错误。这是因为一个由加号形成的拼接表达式如果以String类对象开头,那么编译器会把拼接代码转换为调用StringBuilder类的append()方法进行拼接。此外还需要注意:当String类对象后面连接了多个基础数据类型的值,那么这些基础数据类型的值将按字符串拼接的形式进行连接,而不是做加法操作。例如:“a”+1+2的拼接结果为“a12”而不是“a3”。虽然表达式中出现了1+2,但因为最前端出现了String类对象,1和2只会相互拼接而不会去做数学意义上的加法操作。有关StringBuilder类的知识将在8.4小节进行详细讲解​

(三)String类对象的内容不可更改​

String是一个不可变类,String类对象的内容不可以更改,所有修改String类对象内容的操作都会导致生成一个新的对象。例如,String类中有一个concat()方法,这个方法能够完成字符串的连接。如果程序中出现了以下语句:​

"abc".concat("def");​

虚拟机在执行这条语句时,并不是把“abc”这个对象更改为“abcdef”,而是会创建一个新的String类对象,新对象的值就是“abc”与“def”的连接结果,也就是“abcdef”,原来那个“abc”对象的值始终没有改变。​

(四)不能用==判断两个String类对象的值是否相同​

在Java语言中,如果==运算符两端是基础类型的数据,==运算符的作用是判断两个数据的值是否相等。而如果==运算符两端是引用类型的数据,则==运算符的作用是判断这两个数据是不是内存中的同一个对象。String类对象属于引用类型数据,所以用==运算符并不能判断它们的值是否相同。如果希望比较两个String类对象的值是否相同,需要调用String类的equals()方法实现。例如:​

"abc".equals("def");

这条语句是判断String类的对象“abc”是否与参数“def”的值相同。​

Java语言中,一串字符的两端要加上双引号才能成为一个字符串。如果这串字符中本身就有双引号(")这个字符,就必须在它的前面加上反斜杠(\)使它成为一个转义字符,这样编译器在解析时才会把这个双引号当作一个普通字符,而不是字符串结束的标志。因此,如果在输出“hello”这个单词时希望字母h后面出现一个双引号,要按如下方式书写输出语句:​

System.out.println("h\"ello");

本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。