[解決済み] Javaの "final "キーワードはどのように機能するのでしょうか?(オブジェクトを修正することは可能です。)
2022-03-18 16:15:54
質問
Javaでは
final
キーワードを変数に使用すると、その値を変更してはいけないことを指定できます。
しかし、クラスのコンストラクタやメソッドで値を変更することができますね。繰り返しになりますが、もし変数が
static
の場合、コンパイルエラーになります。
以下はそのコードです。
import java.util.ArrayList;
import java.util.List;
class Test {
private final List foo;
public Test()
{
foo = new ArrayList();
foo.add("foo"); // Modification-1
}
public static void main(String[] args)
{
Test t = new Test();
t.foo.add("bar"); // Modification-2
System.out.println("print - " + t.foo);
}
}
上記のコードは正常に動作し、エラーはありません。
ここで、変数を
static
:
private static final List foo;
今度はコンパイルエラーになりました。どのようにこの
final
は本当にうまくいくのでしょうか?
どのように解決するのですか?
を常に許可しています。
初期化
a
final
変数を使用します。 コンパイラは、一度しかできないように配慮しています。
に格納されたオブジェクトのメソッドを呼び出すと、そのオブジェクトのメソッドを呼び出すことができないことに注意してください。
final
のセマンティクスとは何の関係もありません。
final
. 言い換えれば
final
は、あくまでも参照そのものについてであり、参照されたオブジェクトの内容については関係ありません。
Javaにはオブジェクトの不変性という概念はありません。不変性を実現するには、オブジェクトを慎重に設計する必要があり、それは決して簡単なことではありません。
関連
-
java 例外。Javaツールの初期化
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] Javaで現在のスタックトレースを取得するにはどうすればよいですか?
-
[解決済み] Javaにおける "final class "の意味とは?
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】Javaでfinalキーワードを使用するとパフォーマンスが向上しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
springboot project MIMEタイプ text/htmlで転送された静的ファイルを読み込む。
-
Java Exceptionが発生しました エラー解決
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
Dateが型に解決できない問題を解決する
-
Javaクラスローダーにソースコードから潜り込む
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] C#でJavaのfinalに相当するものは何ですか?
-
[解決済み】Javaでfinalキーワードを使用するとパフォーマンスが向上しますか?