<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 字符串教程 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/java-string-tutorial/](https://javabeginnerstutorial.com/core-java-tutorial/java-string-tutorial/) 字符串是 Java 中大量使用的那些對象之一。 這就是`String`在 Java(字符串池)中具有唯一處理的原因。 * `String`類表示字符串。 * Java 程序中的所有字符串字面值(例如`"abc"`)都實現為此類的實例。 * 字符串就像常量,一旦創建,其值就無法更改。 * 字符串對象是不可變的,因此可以共享。 * 如果要執行很多字符串操作,則可以使用字符串緩沖區和字符串生成器代替字符串。 ### 字符串創建 您可以通過兩種方式在 Java 中創建字符串。 兩者看起來相同,但是兩種方法之間存在差異。 ```java String jbt = new String("JBT"); String jbt = "JBT"; ``` ### 字符串的重要方面 1. 不可變 ### 重要方法 * `internal()` * `length()` * `toString()` * `trim()` * `substring()` ## 字符串存儲 如您所知,java 中除原語外的所有內容都是對象。 字符串也是如此。 字符串也是對象,因此它僅駐留在堆上。 但是還有另一個術語用于字符串存儲,即字符串池/字符串字面值池。 大多數時候,人們將其視為字符串對象的獨立池(對我來說也是如此)。 但是這是錯誤的。 字符串池/字符串字面值池不過是對`String`對象的引用的集合。 我們知道`String`對象是不可變的,因此最好將“`String`”對象與多個引用“共享”。 (反之亦然,因為字符串對象在不同的??引用之間共享,這就是字符串對象不可變的原因。) ## 字符串字面值和對象 字符串以以下兩種格式創建,它們在很多方面彼此不同。 1. 字符串字面值 2. 使用`new`關鍵字 因此,當我們說字符串字面值時,實際上是指字符串池中的引用,而當我們說字符串對象(使用`new`關鍵字)時,我們直接是指堆中的字符串對象。 但是在兩種情況下,我們僅指的是堆中的對象(直接/間接)。 ## 如何創建 現在的問題出現了如何創建字符串字面值和字符串對象。 眾所周知,我們可以通過兩種方式創建字符串對象。 > `String str1 = "abc";` #### 使用`new`關鍵字 ```java String str=new String("javabeginnerstutorial"); ``` 當我們使用`new`運算符創建`String`時,實際上是像第一個選項那樣在堆中創建`String`對象。 在這里,我們在堆內存中創建一個字符串對象,其值為`"abc"`。 和一個名為“`str`”的引用。 還請注意,當我們使用`""`(字面值)創建此`String`對象時,還將創建字面值。 總共將有 1 個字符串對象 1 個字符串字面值并將創建引用。 但是引用將僅引用堆中的`String`對象,而不引用字符串池中的字面值。 當我們使用`""`時,我們正在創建字面值(`""`中的所有內容均視為字面值)。 在這種情況下(第二種情況),JVM 將在字符串池中查找所有引用,并檢查其中是否有指向值`"abc"`的堆中的字符串對象,如果找到,則將返回該對象的引用。 否則,JVM 將在堆中創建一個新的字符串對象,并在字符串池中對其進行內化(使用`inter()`方法)(此對象的引用將添加到字符串池中),以供以后引用。 并且將返回新創建對象的引用。 現在,如果我們再次編寫相同的代碼來創建`String`字面值。 #### 字符串字面值 ```java String str2="javabeginnerstutorial"; ``` 這些類型的字符串是在堆中創建的,如果`String`常量池中的對象具有相同的值,則堆中的對象將被引用為`String`常量池中的該對象。 引用變量`"str2"`將指向堆中的對象。 字符串常量池是一個存儲唯一字符串對象的池,從而增強了不變性,即,即使您對先前創建的字符串進行連接,也將在堆和常量池中同時創建一個新對象(前提是沒有相似之處) 之前存在的對象),然后將該對象相應地返回給程序。 ## 字符串垃圾回收 您可能已經聽說過`String`字面值永遠不適合進行垃圾回收。 注意,我們提到的是字符串字面值,而不是字符串對象。 它們是有區別的。 當不再從應用的活動部分引用對象時,該對象就有資格進行垃圾回收。 字符串字面值總是從字符串字面值池中對其進行引用。 這意味著它們始終引用它們,因此不符合垃圾回收的條件。 但是可能有些`String`對象沒有任何引用,那么它們就有資格進行垃圾回收。 ## 備忘單 * **字符串對象**用于保存文本字符串。 * `java.lang`包的一部分。 * *字符串*可以使用連接運算符(`+`)添加。 * 字符使用單引號(`'`)作為定界符,而字符串使用雙引號(`"`)作為定界符。 * **字符串**對象是不可變的。 字符串對象的值一經分配就無法更改。 * 字符串類是最終的方法,它不能覆蓋字符串類的方法。 * 所有**字符串字面值**由 JVM 添加到字符串池。 * 字符串具有*方法*`length()`,而數組具有*屬性*`length`檢查長度。 * 為了克服`String`的不可變屬性,`StringBuffer`和`StringBuilder`出現在圖片中。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看