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

全部開(kāi)發(fā)者教程

Java 字符串

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

字符串(String)便屬于引用數(shù)據(jù)類型。字符串在 Java 程序中無(wú)處不在,其實(shí)我們?cè)诘谝粋€(gè) Java 程序中就已經(jīng)使用過(guò)了字符串,打印語(yǔ)句中雙引號(hào)中的Hello World就是一個(gè)字符串:System.out.println("Hello World");

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

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

1. 什么是字符串

字符串(string)是由零個(gè)或多個(gè)字符組成的有限序列,它是編程語(yǔ)言中表示文本的數(shù)據(jù)類型。簡(jiǎn)單來(lái)說(shuō),字符串就是一串字符。

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

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

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

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

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

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

我們?cè)賮?lái)看一個(gè)創(chuàng)建并打印字符串的程序示例:

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

運(yùn)行結(jié)果:


q
imooc is great!

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

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

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

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

Tips:

這里需要注意的是,文本塊中起始的三引號(hào)后面要另起一行,也就是說(shuō)下面這種寫法是錯(cuò)誤的:

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

如果我們直接使用javac命令編譯代碼,將會(huì)報(bào)錯(cuò):

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

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

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

2. 字符串的連接

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

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

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

運(yùn)行結(jié)果:

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

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

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

運(yùn)行結(jié)果:

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

我們知道加法運(yùn)算符除了可以連接字符串,也可以進(jìn)行數(shù)學(xué)的加法運(yùn)算。那我們?cè)賮?lái)看一個(gè)實(shí)例:

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

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

$javac StringJoinTest3
java StringJoinTest
100200

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

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

3. 字符串的不可變性

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

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

運(yùn)行結(jié)果:

Java is great!

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

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

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

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

4. 小結(jié)

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