黒馬プログラマーString,StringBufferとStringBuilderの違い
2010 ワード
--------androidトレーニング、JAvaトレーニング、交流を楽しみにしています!--------
まず、次のコードを見てみましょう.
出力は
One more
Two
回答:
Javaは値伝達なので、bの値は変わりませんが、aはappendメソッドを呼び出したので、aの値はonemoreになり、a.append(「more」)をa=「One more」に変更してみてください.
======================================================================================
簡単に言えば、StringタイプとStringBufferタイプの主な性能の違いは、Stringが可変のオブジェクトであることにあるので、Stringタイプを変更するたびに新しいStringオブジェクトを生成し、ポインタを新しいStringオブジェクトに向けることに等しいので、コンテンツを頻繁に変更する文字列はStringを使用しないほうがいいです.オブジェクトを生成するたびにシステムの性能に影響を与えるので、特にメモリにリファレンスがないオブジェクトが多くなると、JVMのGCが動作し始め、その速度はかなり遅くなるに違いありません.StringBufferクラスを使用する場合は結果が異なり、結果のたびに新しいオブジェクトを生成するのではなく、StringBufferオブジェクト自体が操作され、オブジェクト参照が変更されます.したがって、一般的にはStringBuffer、特に文字列オブジェクトが頻繁に変更される場合を推奨します.
java.lang.StringBuilder可変文字シーケンスは5.0に追加されました.これにより、StringBufferと互換性のあるAPIが提供されますが、同期は保証されません.このクラスはStringBufferの簡易置換として設計され,文字列バッファが単一スレッドで使用される場合に用いられる(この場合は一般的である).可能であれば、ほとんどの実装ではStringBufferよりも速いため、クラスを優先することをお勧めします.両者の方法は基本的に同じである.
まず、次のコードを見てみましょう.
public class Buffer
{
public void swap(StringBuffer a, StringBuffer b)
{
a.append(" more");
b = a;
}
public static void main(String[] args)
{
StringBuffer a = new StringBuffer("One");
StringBuffer b = new StringBuffer("Two");
Buffer buffer = new Buffer();
buffer.swap(a, b);
System.out.println(a+"
"+b);
}
}
出力は
One more
Two
回答:
Javaは値伝達なので、bの値は変わりませんが、aはappendメソッドを呼び出したので、aの値はonemoreになり、a.append(「more」)をa=「One more」に変更してみてください.
======================================================================================
簡単に言えば、StringタイプとStringBufferタイプの主な性能の違いは、Stringが可変のオブジェクトであることにあるので、Stringタイプを変更するたびに新しいStringオブジェクトを生成し、ポインタを新しいStringオブジェクトに向けることに等しいので、コンテンツを頻繁に変更する文字列はStringを使用しないほうがいいです.オブジェクトを生成するたびにシステムの性能に影響を与えるので、特にメモリにリファレンスがないオブジェクトが多くなると、JVMのGCが動作し始め、その速度はかなり遅くなるに違いありません.StringBufferクラスを使用する場合は結果が異なり、結果のたびに新しいオブジェクトを生成するのではなく、StringBufferオブジェクト自体が操作され、オブジェクト参照が変更されます.したがって、一般的にはStringBuffer、特に文字列オブジェクトが頻繁に変更される場合を推奨します.
java.lang.StringBuilder可変文字シーケンスは5.0に追加されました.これにより、StringBufferと互換性のあるAPIが提供されますが、同期は保証されません.このクラスはStringBufferの簡易置換として設計され,文字列バッファが単一スレッドで使用される場合に用いられる(この場合は一般的である).可能であれば、ほとんどの実装ではStringBufferよりも速いため、クラスを優先することをお勧めします.両者の方法は基本的に同じである.