正しいのはどれですか。その理由は次のとおりです。
String dynamic = new String();
dynamic = " where id='" + unitId + "'";
Or
String dynamic = " where id='" + unitId + "'";
上記の2つの文字列の初期化の違いは何ですか。
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
することをお勧めします。
簡潔な答え:
String str = new String();
ヒープ上に新しい String オブジェクトを作成します。後で行う場合:
str = "Hello, String Pool";
最初のオブジェクトへの参照を別の参照で上書きするだけです。したがって、最初のオブジェクトは失われます。これを覚えておいてください:文字列は不変です。
String クラスは不変であることがわかっているため、
String str="Hello String";
String クラスを使用する最良の方法は、メモリの浪費を回避できることです。同じ値の文字列が作成されたとき。
文字列 str = 新しい文字列(); // new 演算子があるため、文字列のオブジェクトを作成しています。これにより、メモリに余分なスペースが作成されます。したがって、メモリの浪費と冗長性があります。複雑なオブジェクトを作成するまでは、使用しないことをお勧めします。
しかし、String str ="qwerty"は、それを str に割り当てていることを意味します。ボットは共通プールに保存されます。したがって、この表記法を使用することをお勧めします。
下がいいと思います
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) が含まれる行で宣言と初期化が行われた場合、グローバルに行うことはできません。変数のスコープが問題にならない場合は、先に進むことができます。乾杯!!
このようにすることをお勧めします
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 + "'";