Java クロージャとラムダ式の違いと関係

PHPz
リリース: 2024-05-01 17:57:02
オリジナル
651 人が閲覧しました

クロージャとラムダ式はどちらも Java のローカル変数をキャプチャできます。クロージャは自由変数をキャプチャできますが、ラムダ式は最終変数または事実上最終変数のみをキャプチャできます。クロージャの自由変数はその有効期間全体を通じてアクセスできますが、ラムダ式のキャプチャ変数はラムダ内でのみアクセスできます。クロージャの自由変数はヒープに保存され、ラムダ式のキャプチャ変数はスタックに保存されます。ラムダ式はクロージャを作成し、クロージャにはラムダ式を含めることができます。

Java 闭包与 lambda 表达式的区别和联系

#Java におけるクロージャとラムダ式の違いと関係

#序文 #Closures と Lambda 式はどちらも Java プログラミングにおいて非常に役立つテクニックです。どちらもローカル変数をキャプチャしてスコープ外に保存できます。ただし、それらの間にはいくつかの重要な違いがあります。

クロージャ

クロージャは、実行環境で宣言された変数を、その環境を離れた後でもキャプチャする機能です。これらのキャプチャされた変数は、クロージャの「自由変数」と呼ばれます。

ラムダ式

ラムダ式は、簡略化された無名関数です。パラメータを受け入れて値を返すことができます。ラムダ式は、実行環境で宣言された変数をキャプチャすることもできますが、これはそれらの変数が

final(final)

または 実質的に最終(実質的に最終) である場合に限られます。

#違い

クロージャとラムダ式は両方ともローカル変数をキャプチャできますが、両者の間にはいくつかの重要な違いがあります。

    自由変数:
  • クロージャは自由変数をキャプチャできますが、ラムダ式は最終変数または実質的に最終変数のみをキャプチャできます。
  • スコープ:
  • クロージャの自由変数は、定義されているスコープを離れた後でも、存続期間中ずっとアクセスできます。対照的に、ラムダ式のキャプチャ変数にはラムダ式内でのみアクセスできます。
  • メモリ管理:
  • クロージャのフリー変数はヒープに保存され、ラムダ式のキャプチャされた変数はスタックに保存されます。
接続

これらの違いにもかかわらず、クロージャとラムダ式は密接に関連しています。

    ラムダ式は次のようなものを作成できます。クロージャ:
  • ラムダ式が自由変数をキャプチャすると、クロージャが作成されます。
  • クロージャにはラムダ式を含めることができます:
  • クロージャはラムダ式を自由変数として保存できます。
  • #実践的なケース

#クロージャのケース:

class OuterClass {
    private int x = 10;

    public void printX() {
        Runnable runnable = () -> System.out.println(x);  // 闭包捕获自由变量 x
        runnable.run();
    }
}
ログイン後にコピー

ラムダ式のケース:

class OuterClass {
    private final int x = 10;

    public void printX() {
        System.out.println(x);  // Lambda 表达式可以使用 final 变量
    }
}
ログイン後にコピー

結論

クロージャとラムダ式はどちらも Java で役立つテクニックです。それらの違いと関係を理解することは、効率的で保守可能なコードを作成するために重要です。

以上がJava クロージャとラムダ式の違いと関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート