文字列定数プールサイズ変換リフレクション操作StringBufferおよびStringBuilder

ヒント:記事を書いた後、目次を自動的に生成できます。生成方法については、右側のヘルプドキュメントを参照してください。


1.文字列定数プール

定数プールは、JVMで分割されたメモリ領域です。JVMの実行が開始されると、定数プールとして特別な領域が作成されます。
直接割り当てモードを使用してStringクラスオブジェクトをインスタンス化する場合は、インスタンス化されたオブジェクト(文字列コンテンツ) )はこのオブジェクトプールに自動的に保存されます。

次回も直接代入モードを使用してStringオブジェクトを宣言する場合、この時点でオブジェクトプールに指定されたコンテンツがあると、直接参照されます。

そうでない場合は、新しい文字列オブジェクトを作成し、次回の使用のためにオブジェクトプールに保存します

2.文字列リフレクション操作

リフレクションは、オブジェクト指向プログラミングの重要な機能です。一部のプログラミング言語は「イントロスペクション」とも呼ばれます。これ
は、プログラムの実行中にオブジェクトの詳細情報(タイプ情報、属性情報など)を取得/変更することを指します。、これは、オブジェクトをより適切に「認識」させることと同じです
。Javaでリフレクションを使用するのは少し面倒です。リフレクションの具体的な使用法については、後のコースで詳しく説明します。
文字列が不変である理由(の利点は何ですか?)不変のオブジェクト?

  1. 文字列オブジェクトプールを実装すると便利です。文字列が可変の場合、オブジェクトプールは文字列をいつディープコピーするかを考慮する必要があります。
  2. 不変オブジェクトはスレッドセーフです。
  3. 不変オブジェクトはハッシュコードをキャッシュするのに便利であり、キーとして使用すると、HashMapに効率的に保存できます。
    注:次のコードは開発で作成しないでください。多数の一時オブジェクトが生成され、効率は比較的低いです。**
String str = "Hello";
// 获取 String 类中的 value 字段. 这个 value 和 String 源码中的 value 是匹配的.
Field valueField = String.class.getDeclaredField("value");
// 将这个字段的访问属性设为 true
valueField.setAccessible(true);
// 把 str 中的 value 属性获取到.
char[] value = (char[]) valueField.get(str);
// 修改 value 的值
value[0] = 'h';
System.out.println(str);

実行結果こんにちは

3.文字列内のいくつかの操作

1.文字列内の左右の空白文字(スペース、改行、タブなど)を削除します

s1.trim();

2.文字列を大文字に(小文字に)

  s1.toUpperCase();
  s1.toLowerCase();

3.プール操作への文字列

s2.intern();
String str1 = new String("hello"),intern();

最初に検索し、見つからない場合はプールに入り、その場所に戻ります。プールに入った後、新しいスペースはゴミスペースとしてリサイクルされます。

4.文字列接続(+と同等)

4.StringBuffer和StringBuilder

一般的に、Stringの操作は比較的単純ですが、Stringの不変の性質により、文字列の変更を容易にするために、StringBufferクラスとStringBuilderクラスが提供されています。
StringBufferとStringBuilderの関数のほとんどは同じで、主
にStringの「+」を使用してStringBuffer導入して文字列を接続しますが、この操作をStringBufferクラスのappend()メソッドに変更する必要があります。

public class Test{
    
    
	public static void main(String[] args) {
    
    
		StringBuffer sb = new StringBuffer();
		sb.append("Hello").append("World");
		fun(sb);
		System.out.println(sb);
}
public static void fun(StringBuffer temp) {
    
    
	temp.append("\n").append("www.bit.com.cn");
}
}

1.ストリングリバース

StringBuffer sb = new StringBuffer("helloworld");
System.out.println(sb.reverse());

2.指定した範囲を削除します

StringBuffer sb = new StringBuffer("helloworld");
System.out.println(sb.delete(5, 10));

3.位置を指定する前にデータを挿入します

StringBuffer sb = new StringBuffer("helloworld");
System.out.println(sb.insert(0, "lala"));

おすすめ

転載: blog.csdn.net/weixin_45070922/article/details/112909755