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