Java String、StringBuffer、StringBuilderについて説明します.
16463 ワード
JavaでStringを宣言する
1.new演算子の使用
new_str1 : 918221580, Hello Java!
new_str2 : 1746572565, Hello Java!各Stringはhip領域に格納され、同じ文字列でも異なるメモリアドレスが表示されます. 線 各StringをString Constant pool領域に格納し、同じ文字列の文字で作成すると、同じメモリアドレスが表示されます. 結果
literal_str1 : 918221580, Hello Java!
literal_str2 : 918221580, Hello Java!
JavaでStringを使うべきでないとき!
文字列アクション!(+、concat、substringなど…)
JavaでString文字列を処理すると、毎回新しいインスタンスが生成されるため、パフォーマンスと速度が遅くなります.サンプルコードを見てみましょう.
literal_str1 : 918221580, Hello Java!
literal_str1 : 1746572565, Hello Java!?
literal_str1 : 989110044, Hello Java!
既存の文字列に追加し、削除時に新しいメモリアドレスに割り当てられていることを確認します. StringBuilderとStringBufferを使います!
StringBuilderとStringBufferはnew演算子でのみ文字列を生成できます.
sBuffer : 918221580, Hello StringBuffer!
sBuffer : 918221580, Hello StringBuffer!?
sBuffer : 918221580, Hello StringBuffer!
sBuilder : 989110044, Hello StringBuilder!
sBuilder : 989110044, Hello StringBuilder!?
sBuilder : 989110044, Hello StringBuilder!の結果から、StringBufferとStringBuilderは文字列操作によってアドレスを変更しないことがわかります. StringBuilderとStringBufferの違いは?
Javaの正式なドキュメントでこれらの情報を見つけることができます.
StringBuilder、StringBuffer公式ドキュメント https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/StringBuilder.html https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/StringBuffer.html 要約すると... StringBuilder:単一スレッド環境向けに設計されたクラスで、ほとんどの場合StringBufferよりもパフォーマンスが高速です. StringBuffer:マルチスレッド環境に特化した設計で、スレッドを安全に処理できます.
1.new演算子の使用
String new_str1 = new String("Hello Java!");
String new_str2 = new String("Hello Java!");
System.out.println("new_str1 : " + System.identityHashCode(new_str1) + ", " + new_str1);
System.out.println("new_str2 : " + System.identityHashCode(new_str2) + ", " + new_str2);
結果new_str1 : 918221580, Hello Java!
new_str2 : 1746572565, Hello Java!
String literal_str1 = "Hello Java!";
String literal_str2 = "Hello Java!";
System.out.println("literal_str1 : " + System.identityHashCode(literal_str1) + ", " + literal_str1);
System.out.println("literal_str2 : " + System.identityHashCode(literal_str2) + ", " + literal_str2);
literal_str1 : 918221580, Hello Java!
literal_str2 : 918221580, Hello Java!
JavaでStringを使うべきでないとき!
文字列アクション!(+、concat、substringなど…)
JavaでString文字列を処理すると、毎回新しいインスタンスが生成されるため、パフォーマンスと速度が遅くなります.サンプルコードを見てみましょう.
String literal_str1 = "Hello Java!";
String literal_str2 = "Hello Java!";
System.out.println("literal_str1 : " + System.identityHashCode(literal_str1) + ", " + literal_str1);
// 문자열 연결
literal_str1 = literal_str2.concat("?");
System.out.println("literal_str1 : " + System.identityHashCode(literal_str1) + ", " + literal_str1);
// 문자열 자르기(마지막 문자 제거)
literal_str1 = literal_str1.substring(0, literal_str1.length() - 1);
System.out.println("literal_str1 : " + System.identityHashCode(literal_str1) + ", " + literal_str1);
結果literal_str1 : 918221580, Hello Java!
literal_str1 : 1746572565, Hello Java!?
literal_str1 : 989110044, Hello Java!
既存の文字列
StringBuilderとStringBufferはnew演算子でのみ文字列を生成できます.
// StringBuffer
StringBuffer sBuffer = new StringBuffer("Hello StringBuffer!");
System.out.println("sBuffer : " + System.identityHashCode(sBuffer) + ", " + sBuffer);
sBuffer.append("?");
System.out.println("sBuffer : " + System.identityHashCode(sBuffer) + ", " + sBuffer);
sBuffer.deleteCharAt(sBuffer.length()-1);
System.out.println("sBuffer : " + System.identityHashCode(sBuffer) + ", " + sBuffer);
// StringBuilder
StringBuilder sBuilder = new StringBuilder("Hello StringBuilder!") ;
System.out.println("sBuilder : " + System.identityHashCode(sBuilder) + ", " + sBuilder);
sBuilder.append("?");
System.out.println("sBuilder : " + System.identityHashCode(sBuilder) + ", " + sBuilder);
sBuilder.deleteCharAt(sBuilder.length()-1);
System.out.println("sBuilder : " + System.identityHashCode(sBuilder) + ", " + sBuilder);
結果sBuffer : 918221580, Hello StringBuffer!
sBuffer : 918221580, Hello StringBuffer!?
sBuffer : 918221580, Hello StringBuffer!
sBuilder : 989110044, Hello StringBuilder!
sBuilder : 989110044, Hello StringBuilder!?
sBuilder : 989110044, Hello StringBuilder!
Javaの正式なドキュメントでこれらの情報を見つけることができます.
StringBuilder、StringBuffer公式ドキュメント
Reference
この問題について(Java String、StringBuffer、StringBuilderについて説明します.), 我々は、より多くの情報をここで見つけました https://velog.io/@ddkk94/JavaString의-Literal-생성의-문제점テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol