ホームページ  >  記事  >  Java  >  Lambdas ではローカル変数は Final である必要があるのに、インスタンス変数にはその必要がないのはなぜですか?

Lambdas ではローカル変数は Final である必要があるのに、インスタンス変数にはその必要がないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 20:54:31888ブラウズ

Why Do Local Variables Need to Be Final in Lambdas, But Instance Variables Don't?

ラムダでローカル変数にはファイナリティが必要であるのに、インスタンス変数には必要がない理由

ラムダを使用するとき、ローカル変数のルールに遭遇したことがあるかもしれません。変数はラムダのスコープ内でfinalとして宣言する必要があります。ただし、インスタンス変数にはこの修飾は必要ありません。この違いは、ラムダのコンテキストにおける 2 つのタイプの変数間の基本的な違いに由来します。

ラムダ内のローカル変数は、JVM によってインスタンス化されるときにラムダに効果的にコピーされます。これは、ラムダ内のローカル変数に加えられた変更は、それを囲んでいるスコープ内の元の変数に影響を与えないことを意味します。したがって、偶発的な変更を防ぎ、不変性を確保するには、ローカル変数を Final として宣言する必要があります。

対照的に、インスタンス変数は、外側のクラス内で定義され、ラムダによって直接参照されます。ラムダ内のインスタンス変数に変更が加えられると、変更はそれを囲んでいるクラス インスタンスに伝播されます。これは、インスタンス変数のスコープが、それを囲んでいるクラス全体に拡張されるためです。

要約すると、ローカル変数は基本的にラムダのインスタンス化中にコピーされるため、ラムダ内でファイナリティが必要ですが、インスタンス変数はアイデンティティを維持するため、必要ありません。外側のクラス内のスコープ。

以上がLambdas ではローカル変数は Final である必要があるのに、インスタンス変数にはその必要がないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。