第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Java 字符串

Java 基本數(shù)據(jù)類型一節(jié)中,我們已經(jīng)知道 Java 中有兩大數(shù)據(jù)類型:一個是基本數(shù)據(jù)類型,另一個是引用數(shù)據(jù)類型。

字符串(String)便屬于引用數(shù)據(jù)類型。字符串在 Java 程序中無處不在,其實我們在第一個 Java 程序中就已經(jīng)使用過了字符串,打印語句中雙引號中的Hello World就是一個字符串:System.out.println("Hello World");

本小節(jié)我們將介紹字符串的基礎(chǔ)知識,告訴你如何創(chuàng)建一個字符串,也會講到 Java 13支持的多行字符串的創(chuàng)建方法和注意事項,還會介紹很常用的字符串的連接操作,最后我們也會著重討論字符串的一個重要特性:不可變性。

需要注意的是,String是在java.lang包中定義的內(nèi)置類,了解它的相關(guān)操作需要面向?qū)ο蟮那爸弥R,為了減少初學(xué)者的困擾,字符串的相關(guān)操作不會在本小節(jié)討論。我們將在完成面向?qū)ο蟮膶W(xué)習(xí)后專門講解String類。

1. 什么是字符串

字符串(string)是由零個或多個字符組成的有限序列,它是編程語言中表示文本的數(shù)據(jù)類型。簡單來說,字符串就是一串字符。

2. 創(chuàng)建字符串

2.1 創(chuàng)建字符和字符串

提到字符串,就很容易與字符關(guān)聯(lián)起來,回憶我們已經(jīng)學(xué)過的字符類型char,在代碼中我們是這樣創(chuàng)建字符的:

// 依次創(chuàng)建三個字符 慕 課 網(wǎng)
char c1 = '慕';
char c2 = '慕';
char c3 = '網(wǎng)';

char類型不同的是,String類型使用雙引號來表示一個字符串(例如:"字符串文字"),在代碼中我們可以這樣創(chuàng)建字符串:

String str = "慕課網(wǎng)";

我們再來看一個創(chuàng)建并打印字符串的程序示例:

實例演示
預(yù)覽 復(fù)制
復(fù)制成功!
public class StringTest1 {
    public static void main(String[] args) {
        // 創(chuàng)建一個空字符串
        String str1 = "";
        // 創(chuàng)建一個只包含一個字符的字符串
        String str2 = "q";
        // 創(chuàng)建包含多個字符的字符串
        String str3 = "imooc is great!";
        // 依次打印它們
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結(jié)果:


q
imooc is great!

字符串可以聲明為空,因此第一行將打印一個空行。

2.2 創(chuàng)建多行字符串

Java 13 以后,我們可以使用三引號來表示一個多行字符串,被官方稱為“文本塊”。文本塊常用來表示多行的或大段的文字。例如:

public class StringTest3 {
    public static void main(String[] args) {
        String str = """
            Java 很棒!
            慕課網(wǎng)很棒??!
            能夠在慕課網(wǎng)學(xué) Java 更棒?。?!""";
        System.out.println(str);
    }
}

Tips:

這里需要注意的是,文本塊中起始的三引號后面要另起一行,也就是說下面這種寫法是錯誤的:

String str = """Java 很棒!
      慕課網(wǎng)很棒??!
      能夠在慕課網(wǎng)學(xué) Java 更棒?。?!""";

如果我們直接使用javac命令編譯代碼,將會報錯:

javac StringTest3.java
StringTest3.java:4: 錯誤: 文本塊 是預(yù)覽功能,默認(rèn)情況下禁用。
        String str = """
                     ^
  (請使用 --enable-preview 以啟用 文本塊)
1 個錯誤

報錯告訴我們:文本塊是預(yù)覽功能,默認(rèn)是禁用的。我們可以給編譯器加上一些參數(shù)來編譯執(zhí)行代碼:

$ javac -source 14 --enable-preview StringTest3.java
$ java --enable-preview StringTest3
Java 很棒!
慕課網(wǎng)很棒??!
能夠在慕課網(wǎng)學(xué) Java 更棒?。。?

2. 字符串的連接

我們可以使用加法運算符+將字符串和任意其他的數(shù)據(jù)類型進(jìn)行連接操作。

可以將兩個或多個字符串連接在一起,例如:

實例演示
預(yù)覽 復(fù)制
復(fù)制成功!
public class StringJoinTest1 {
    public static void main(String[] args) {
        // 定義兩個字符串
        String str1 = "Hello";
        String str2 = "慕課網(wǎng)";
        // 將字符串str1連接一個空格,再連接str2,最后再連接一個感嘆號
        String str3 = str1 + " " + str2 + "!";
        System.out.println(str3);
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結(jié)果:

$ javac StringJoinTest1.java
$ java StringJoinTest1
Hello 慕課網(wǎng)!

我們還可以將字符串與其他類型的值相連接,例如:

實例演示
預(yù)覽 復(fù)制
復(fù)制成功!
public class StringJoinTest2 {
    public static void main(String[] args) {
        // 定義整型變量 age
        int age = 12;
        // 定義浮點型變量 height
        float height = 132.5f;
        // 定義一個字符串變量 name
        String name = "小明";
        // 將上面三個變量連接,拼成一個更長的字符串
        String result = name + "今年" + age + "歲了," + "他的身高為" + height + "cm";
        System.out.println(result);
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結(jié)果:

小明今年10歲了,他的身高為132.5cm

我們知道加法運算符除了可以連接字符串,也可以進(jìn)行數(shù)學(xué)的加法運算。那我們再來看一個實例:

實例演示
預(yù)覽 復(fù)制
復(fù)制成功!
public class StringJoinTest3 {
    public static void main(String[] args) {
        // 定義兩個整型變量a、b
        int a = 100;
        int b = 200;
        // 打印一個空字符串+a+b的值
        System.out.println("" + a + b);
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

試想屏幕上將會得到什么結(jié)果呢?編譯執(zhí)行代碼:

$javac StringJoinTest3
java StringJoinTest
100200

這里結(jié)果沒有打印300的原因很簡單: 按照從左到右的執(zhí)行順序,(空字符串 + 數(shù)值100)的運算結(jié)果應(yīng)該是字符串100,然后再運算(字符串100+數(shù)值200),其最終結(jié)果為字符串100200。由于運算中有字符串的存在,+運算符在這里用于字符串的連接而不是數(shù)值的計算。

試想,如果將表達(dá)式中的操作數(shù)倒過來(即b + a + ""),將得到什么結(jié)果呢?

3. 字符串的不可變性

字符串有一個重要特性:不可變性。也就是說,字符串一經(jīng)創(chuàng)建便無法修改。我們來看一個示例:

實例演示
預(yù)覽 復(fù)制
復(fù)制成功!
public class StringTest4 {
    public static void main(String[] args) {
        // 創(chuàng)建一個字符串 str
        String str = "hello imooc!";
        // 對 str 重新賦值
        str = "Java is great!";
        System.out.println(str);
    }
}
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結(jié)果:

Java is great!

童鞋們可能發(fā)現(xiàn),咦?不是說字符串一旦創(chuàng)建就無法修改了嗎,怎么str變量依然被修改成了新的值?

這里直接給出答案:上述例子中,變量str沒有修改,而是變量str的“指向”被修改了。

我們通過圖示來描述上述代碼的執(zhí)行流程,首先創(chuàng)建一個str,指向"hello imooc!":

當(dāng)對str重新賦值后,在內(nèi)存中先創(chuàng)建了字符串"Java is great",然后改變了變量str的指向,原來的"hello imooc!"并沒有發(fā)生改變:

4. 小結(jié)

通過本小節(jié)的學(xué)習(xí),我們了解了字符類型char 是基本數(shù)據(jù)類型,而字符串類型String是引用類型。在創(chuàng)建字符串時,我們可以使用雙引號表示,從Java 13起,加入了多行字符串的表示方法。字符串的連接操作是使用加法運算符實現(xiàn)的。最后要特別注意字符串的不可變性,這在面試中經(jīng)常會考到。