Java インタビュー ---文字列関連のコンテンツ

1. Java の文字列プールとは何ですか?

文字列プールは、Java で文字列オブジェクトを管理するためのメカニズムです。Java では、二重引用符を使用して作成された文字列は文字列プールに保存されます。新しい文字列を宣言するときに、同じ値を持つ文字列が文字列プールにすでに存在する場合は、新しいオブジェクトを作成せずに、プール内の文字列オブジェクトが直接返されます。これにより、メモリのオーバーヘッドが削減され、パフォーマンスが向上します。

2. String、StringBuilder、StringBuffer の違いは何ですか?

  1. 変動性:

    • String クラスは不変です。つまり、作成後に値を変更することはできません。文字列に対するすべての操作には新しいオブジェクトの作成が必要です。文字列操作を頻繁に行うと、大量の新しいオブジェクトが生成され、メモリ オーバーヘッドが発生します。
    • StringBuffer クラスと StringBuilder クラスは可変であるため、文字列を直接変更でき、頻繁な新しいオブジェクトを回避できます。
  2. スレッドの安全性:

    • String クラスはスレッドセーフであり、複数のスレッドが問題なく同時に同じ String オブジェクトにアクセスできます。
    • StringBuffer クラスはスレッドセーフであるため、マルチスレッド環境での文字列操作には StringBuffer クラスを使用することをお勧めします。
    • StringBuilder クラスはスレッドセーフではないため、シングルスレッド環境での文字列操作に適しています。
  3. パフォーマンス:

    一般的に言えば、StringBuilder > StringBuffer > String;

文字列の内容を頻繁に変更する必要がある場合、特にシングルスレッド環境では StringBuilder クラスを使用することをお勧めします。文字列操作が必要で、スレッドの安全性を確保する必要がある場合は、StringBuffer クラスを使用できます。変更する必要のない少数の文字列の場合は、String クラスを使用してパフォーマンスを向上させることができます。

3. 2 つの文字列の内容を比較して、それらが等しいかどうかを確認するにはどうすればよいですか?

Java では、equals() メソッドを使用して、2 つの文字列の内容が等しいかどうかを比較できます。例えば:

String str1 = "Hello";
String str2 = "World";
if (str1.equals(str2)) {
    
    
    // 两个字符串内容相等
} else {
    
    
    // 两个字符串内容不相等
}

また、equalsIgnoreCase() メソッドを使用して、大文字と小文字を無視し、2 つの文字列の内容を比較して等しいかどうかを確認することもできます。

4. イコールと == の違い

1. オブジェクトの場合、== はそれらの参照を比較します。つまり、2 つのオブジェクトが同じメモリ アドレスを指しているかどうかを判断します。基本的なデータ型 (int、float など) の場合、== はそれらの値が等しいかどうかを比較します。
例えば:

String str1 = new String("Hello");
String str2 = new String("Hello");
String str3 = str1;

System.out.println(str1 == str2); // false,因为str1和str2引用的是不同的对象
System.out.println(str1 == str3); // true,因为str1和str3引用的是同一个对象
  1. equals() メソッドは、2 つのオブジェクトの値が等しいかどうかを比較するために使用されます。equals() は基本的なデータ型を比較できません

    例えば:

    String str1 = new String("Hello");
    String str2 = new String("Hello");
    
    System.out.println(str1.equals(str2)); // true,因为String类重写了equals方法,比较的是字符串内容
    

5. String クラスの一般的に使用されるメソッドは何ですか?

  • length(): 文字列の長さを取得します。
  • charAt(int index): 指定されたインデックス位置にある文字を返します。
  • isEmpty(): 文字列が空 (長さが 0) かどうかを判断します。
  • substring(int beginIndex, int endIndex): 指定された範囲内の部分文字列をインターセプトします。
  • contains(String str): 文字列に指定された部分文字列が含まれているかどうかを判断します。
  • quals(Object obj): 文字列の内容が指定されたオブジェクトと等しいかどうかを判断します。
  • toUpperCase(): 文字列を大文字に変換します。
  • toLowerCase(): 文字列を小文字に変換します。
  • split(String regex): 指定された正規表現に従って文字列を文字列配列に分割します。
  • replace(char oldChar, char newChar): 単一の文字を置換します。

おすすめ

転載: blog.csdn.net/drhnb/article/details/132123586