JAvaのStringBufferクラスとStringBuilderクラス
2219 ワード
StringBufferは、Stringと親関係があるように見えるクラスですが、実際にはそうですが、Stringクラスのすべての基本機能を含む場合、文字列を頻繁に操作する必要がある場合に適しています.
まず、一言見てみましょう.
「Stringの場合、文字列定数は宣言されると変更できませんが、文字列オブジェクトは変更できますが、変更されるのはメモリアドレスの指向です」
簡単な例を見てみましょう
String s="abc";//このときsはオブジェクトnew String(「abc」)を指す
s="bcd"; //このときsはnew String(「bcd」)を指し,元の指向オブジェクトは捨てられる.
また、s=s+「hello」;まだ新しいオブジェクトnew String(「bcdhello」)を指しており、新しいオブジェクトを格納するためにJVMがBufferStringを自動的に生成します.
StringBufferの文字列の接続にはappend()メソッドが使用されます.
Stringはfinal定義を使用しているため継承できません.
String——>StringBuffer
StringBuffer——>String
StringBufferの3つの一般的な方法
reverse() 文字列の反転
replace(start,end,"str") 文字列指定部分置換
insert(pos,"str") 文字列指定位置挿入文字列アクション
以上の3つのメソッドStringクラスは存在しません
ここでは文字列クラスStringBuilderを追加します
StringBuilderの可変文字シーケンスは5.0に追加されました.これにより、StringBufferと互換性のあるAPIが提供されますが、同期は保証されません.このクラスはStringBufferの簡易置換として設計され,文字列バッファが単一スレッドで使用される場合に用いられる(この場合は一般的である).可能であれば、ほとんどの実装ではStringBufferよりも速いため、クラスを優先することをお勧めします.両者の方法は基本的に同じです.
おすすめブログ:http://blog.csdn.net/sunnyyoona/article/details/50370580
まず、一言見てみましょう.
「Stringの場合、文字列定数は宣言されると変更できませんが、文字列オブジェクトは変更できますが、変更されるのはメモリアドレスの指向です」
簡単な例を見てみましょう
String s="abc";//このときsはオブジェクトnew String(「abc」)を指す
s="bcd"; //このときsはnew String(「bcd」)を指し,元の指向オブジェクトは捨てられる.
また、s=s+「hello」;まだ新しいオブジェクトnew String(「bcdhello」)を指しており、新しいオブジェクトを格納するためにJVMがBufferStringを自動的に生成します.
StringBufferの文字列の接続にはappend()メソッドが使用されます.
public class StringBufferDemo01 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer() ;
buf.append("hello") ;
buf.append(" ").append("world").append("!!!") ;
System.out.println(buf) ;
}
}
Stringはfinal定義を使用しているため継承できません.
String——>StringBuffer
public class StringBufferDemo02 {
<span style="white-space:pre"> </span>public static void main(String[] args) {
String s="hello";
<span style="white-space:pre"> </span>StringBuffer buf = new StringBuffer(str) ;
<span style="white-space:pre"> </span>System.out.println(buf) ;
<span style="white-space:pre"> </span>}
}
StringBuffer——>String
public class StringBufferDemo02 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer() ;
buf.append("hello") ;
String str = buf.toString() ; // StringBuffer --> String
System.out.println(str) ;
}
}
StringBufferの3つの一般的な方法
reverse() 文字列の反転
replace(start,end,"str") 文字列指定部分置換
insert(pos,"str") 文字列指定位置挿入文字列アクション
以上の3つのメソッドStringクラスは存在しません
ここでは文字列クラスStringBuilderを追加します
StringBuilderの可変文字シーケンスは5.0に追加されました.これにより、StringBufferと互換性のあるAPIが提供されますが、同期は保証されません.このクラスはStringBufferの簡易置換として設計され,文字列バッファが単一スレッドで使用される場合に用いられる(この場合は一般的である).可能であれば、ほとんどの実装ではStringBufferよりも速いため、クラスを優先することをお勧めします.両者の方法は基本的に同じです.
おすすめブログ:http://blog.csdn.net/sunnyyoona/article/details/50370580