一串连续的字符被称为字符串。为了与程序中的变量名相区别,字符串的两端都会加上双引号,所以在程序中如果出现了“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所示:
图9-1 用加号拼接StringBuffer类对象
虽然StringBuffer类对象不能用加法完成拼接,但如果在最前面加上一个String类对象就能完成拼接,如图9-2所示:
图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");
本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。
标签:abc,String,第九章,运算符,字符串,拼接,对象,基本常识 From: https://blog.51cto.com/mugexuetang/5982141