首頁  >  文章  >  Java  >  java中string類別是什麼

java中string類別是什麼

(*-*)浩
(*-*)浩原創
2019-05-22 09:21:133851瀏覽

java中String類別的使用頻率非常高,那讓我們來看看它到底是什麼?

java中string類別是什麼

String是不可變物件

#java.lang.String類別使用了final修飾,不能被繼承。 Java程式中的所有字面值,即雙引號括起的字串,如"abc",都是作為String類別的實例實現的。

String是常數,其物件一旦建構就不能再被改變。換句話說,String物件是不可變的,每一個看起來會修改String值的方法,實際上都是創造了一個全新的String對象,以包含修改後的字串內容。而最初的String物件則絲毫未動。 String物件具有唯讀特性,指向它的任何引用都不可能改變它的值,因此,也不會對其他的引用有什麼影響。但是字串引用可以重新賦值。

java字串在記憶體中採用unicode編碼方式,任何一個字元對應兩個位元組的定長編碼,即任何一個字元(無論中文或英文)都算一個字元長度,佔用兩個字節。

範例:

public class Immutable {
      public static String upcase(String s) {
           return s.toUpperCase();
      }
      public static void main(String[ ] args) {
           String str1= "Hello World";
           System.out.println(str1);  //Hello World
           String str2 = upcase(str1);
           System.out.println(str2);  //HELLO WORLD
           System.out.println(str1);  //Hello World
     }
}

當str1傳遞給upcase()方法時,實際傳遞的是引用的一個拷貝。其實,每當把String物件當作方法的參數時,都會複製一份引用,而該引用所指的物件其實一直待在單一的實體位置上,從未動過。

String常數池

常數池(constant pool)指的是編譯期被確定,並被保存在已編譯的.class檔案中的一些數據。它包括了關於類別、方法、介面等中的常數,也包括字串常數。 Java為了提高效能,靜態字串(字面量/常數/常數連接的結果)在常數池中創建,並儘量使用同一個對象,重複使用靜態字串。對於重複出現的字串直接量,JVM會先在常數池中查找,如果常數池中存在即傳回該物件。

例2:

public class test1 {
    public static void main(String[] args){
        String str1 = "Hello";
        //不会创建新的String对象,而是使用常量池中已有的"Hello",
        String str2 = "Hello";
        System.out.println(str1 == str2); //true
        //使用new关键字会创建新的String对象
        String str3 = new String("Hello");
        System.out.println(str1 == str3); //false 
    }
}

以上是java中string類別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn