Java の String クラスはよく使われるので、それが何なのか見てみましょう。
String は不変オブジェクトです。
java.lang.String クラスは最終変更を使用するため、継承できません。 Java プログラム内のすべてのリテラル値、つまり「abc」などの二重引用符で囲まれた文字列は、String クラスのインスタンスとして実装されます。
文字列は定数であり、そのオブジェクトは一度構築されると変更できません。つまり、String オブジェクトは不変であり、String 値を変更するように見えるすべてのメソッドは、実際には、変更された文字列の内容を含む新しい String オブジェクトを作成します。元の String オブジェクトは変更されません。 String オブジェクトは読み取り専用の特性を持ち、それを指す参照はその値を変更できないため、他の参照には影響を与えません。ただし、文字列参照は再割り当てできます。
Java 文字列はメモリ内で Unicode エンコーディングを使用します。あらゆる文字は 2 バイトの固定長エンコーディングに対応します。つまり、あらゆる文字 (中国語でも英語でも) は長さが 1 文字としてカウントされ、2 ワードを占めます。お祭り。
例:
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 オブジェクトがメソッドのパラメーターとして使用されるたびに、参照がコピーされ、その参照が指すオブジェクトは実際には 1 つの物理的な場所に留まり、移動されることはありません。
文字列定数プール
定数プール (定数プール) は、コンパイル中に決定され、コンパイルされた .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の文字列クラスとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。