どの変数/インスタンスがメモリを消費できますか?
すべてのクラスがメモリを占有します。どのくらいのクラスに依存します。すべてのオブジェクトがヒープメモリを占有します。どのくらいそのクラスに依存します。多くのクラスとオブジェクトには他のオブジェクトへの参照も含まれており、他のオブジェクトは独自のヒープメモリを占有します。いくつかのオブジェクトには固有のリソースが関連付けられており、固有の量のメモリを占有します。ローカル変数は、そのタイプに適したスタックメモリを占有しますが、状況によっては、特定のローカル変数が他のものと同じスタックメモリを共有することがあります。あなたのケース(1)では
:
String nextPoint=new StringBuilder().append("My").append("next").append("point").toString();
System.out.println(nextPoint);
変数nextPoint
は、(参考のため、全体ではなくString
)スタックメモリを消費し、ローカル参照変数です。これは、新しいStringBuilder
オブジェクト(ヒープ上)を作成し、3つの文字列(それぞれヒープメモリを占有するオブジェクト)を追加し、次に新しいString
オブジェクト(ヒープメモリを占有する)を作成し、その参照を格納することによって初期化されますnextPoint
にあります。 StringBuilder
には、蓄積された文字データのための何らかの関連ストレージがあります。これは関連するStringのどれとも重複しません。
あなたのケース(2)は、String
への参照の代わりにStringBuilder
への参照が保持されるという点でのみ異なります。それは後続のコードに影響を与えるかもしれませんが、どのオブジェクトが作成され、どのメモリが必要であるかには何の違いもありません。
私は "nextPoint" varaibleまたは "downPoint"変数を使用している方が良い解決法ですか?
これは、後で何をしたいかによって異なります。これらの変数のどちらかをもう一度使用しない場合は、純粋に文法的な違いがあります。私のコードスニペットの結果が何であるかを
[?]
、クラスでそれを入れて、それを実行し、そして自分のために見つけます。それとも、コードからそれを理解するか。これは私たちがあなたのために答える必要があるものではありません。