私は最終的な変数の特性を知っています。初期化された状態から変更することはできません。しかし、クラスでfinal変数を使用するStringBufferと、クラスのオブジェクトはJavaのメソッドをStringBuffer使用して変更されます。append()
StringBufferfinal 修飾子での使用に関して、他のものとどのように異なりますか...
これについて明確な考えを得るために私を導いてください...
final変数を再割り当てできないとだけ言っています。ただし、変数の属性は引き続き変更できます
よくある間違いはsb、次の例では がオブジェクトであると想定することです。
final StringBuilder sb = new StringBuilder();
実はsb参考になります。参照するオブジェクトに関係なく、4 バイト (場合によっては 8 バイト) です。その参照は変更できません。ただし、参照されるオブジェクトは変更される可能性があります。
finalこの場合、オブジェクトへの参照は最終的なものであり (一度しか割り当てられない)、オブジェクト自体ではないことを意味します。
オブジェクト自体は引き続き変更できます。
final参照を作成すると、参照StringBufferを再割り当てすることはできませんが、この参照が指しているオブジェクトはいつでも更新できます。
Javaのfinalキーワード is は、オブジェクトを参照する変数を再割り当てできないことを意味します。しかし、それはオブジェクト自体がその状態を変更できないという意味ではありません。
あなたの質問は、配列オブジェクトの方が適切です。
final StringBuffer sb = new StringBuffer();
最終的に、 sbsb参照値を上書きすることはできませんが、sb に関連付けられたオブジェクトは変更されない特定の特性を持ち、これはその 1 つです。