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


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

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

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

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

    Exam09_01.java

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

    【例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");

    除阅读文章外,各位小伙伴还可以点击这里观看我在本站的视频课程学习Java!

  • 相关阅读:
    【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
    赛力斯上半年营收124亿亏17亿:与华为深度捆绑 已推两款车型
    Python爬虫:让“蜘蛛”帮我们工作
    零碎的c++二
    Vue路由和Node.js环境搭建
    小谈设计模式(21)—迭代器模式
    Leetcode 【1488. 避免洪水泛滥】
    golang不使用go get连接数据库
    可靠的可视化监控平台应用在那些场景?
    计算机网络 网络层设备的 冲突域和广播域
  • 原文地址:https://blog.csdn.net/shalimu/article/details/128061487