1

正しいのはどれですか。その理由は次のとおりです。

String dynamic = new String();
dynamic = " where id='" + unitId + "'";

Or

String dynamic = " where id='" + unitId + "'";

上記の2つの文字列の初期化の違いは何ですか。

4

8 に答える 8

5
String dynamic = new String();   //created an String object
dynamic = " where id='" + unitId + "'"; //overriding reference with new value

文字列は不変であるためdynamic 、共通プールに格納されます。

String dynamic = " where id='" + unitId + "'";

これもリテラルであり、共通プールに保管されます。

したがって、共通プールで共有されているリテラルをString直接割り当てることで作成できます。String

new演算子を使用してheap 内Stringにオブジェクトを構築することは一般的ではなく、推奨されません。

だからライン

String dynamic = new String();

冗長で、不要なメモリをヒープに割り当てています。

そうしないでください。

両方のケースで何が起こるかを学んでください。

最後に、「+」を使用した連結をあまり使用しないでください。連結の量が少なくても害はありません。より大きな金額を扱っている場合は、 appendメソッドを使用StringBuilderすることをお勧めします。

于 2013-10-17T05:52:06.490 に答える
2

簡潔な答え:

String str = new String();

ヒープ上に新しい String オブジェクトを作成します。後で行う場合:

str = "Hello, String Pool";

最初のオブジェクトへの参照を別の参照で上書きするだけです。したがって、最初のオブジェクトは失われます。これを覚えておいてください:文字列は不変です。

于 2013-10-17T05:39:35.020 に答える
1

String クラスは不変であることがわかっているため、 String str="Hello String"; String クラスを使用する最良の方法は、メモリの浪費を回避できることです。同じ値の文字列が作成されたとき。

于 2013-10-17T12:01:13.023 に答える
1

文字列 str = 新しい文字列(); // new 演算子があるため、文字列のオブジェクトを作成しています。これにより、メモリに余分なスペースが作成されます。したがって、メモリの浪費と冗長性があります。複雑なオブジェクトを作成するまでは、使用しないことをお勧めします。

しかし、String str ="qwerty"は、それを str に割り当てていることを意味します。ボットは共通プールに保存されます。したがって、この表記法を使用することをお勧めします。

于 2014-09-09T09:00:46.067 に答える
0

下がいいと思います

String str; // Just declares the variable and the default will be null. This can be done in global scope or outer scope

str = "where id" + unitID + "'"; // Initializing string with value when needed. This will be done in the inner scope.

初期化に動的テキスト (この場合は unitID) が含まれる行で宣言と初期化が行われた場合、グローバルに行うことはできません。変数のスコープが問題にならない場合は、先に進むことができます。乾杯!!

于 2013-10-17T05:47:24.240 に答える
0

このようにすることをお勧めします

String dynamic = " where id='" + unitId + "'";

String dynamic  = new String();// DON'T DO THIS!
dynamic = " where id='" + unitId + "'";

このステートメントは、実行されるたびに新しい String インスタンスを作成します。これらのオブジェクトを作成する必要はありません。String コンストラクターへの引数 (" where id='" + unitId + "'") 自体が String インスタンスであり、コンストラクターによって作成されたすべてのオブジェクトと機能的に同一です。この使用がループまたは頻繁に呼び出されるメソッドで発生すると、何百万もの String インスタンスが不必要に作成される可能性があります。改善されたバージョンは次のとおりです。

String dynamic = " where id='" + unitId + "'";
于 2013-10-17T05:34:29.140 に答える