Rumah  >  Artikel  >  Java  >  Perbezaan dan sambungan antara penutupan Java dan ungkapan lambda

Perbezaan dan sambungan antara penutupan Java dan ungkapan lambda

PHPz
PHPzasal
2024-05-01 17:57:02591semak imbas

Kedua-dua penutupan dan ungkapan lambda boleh menangkap pembolehubah tempatan dalam Java: penutupan boleh menangkap pembolehubah bebas, manakala ungkapan lambda hanya boleh menangkap pembolehubah akhir atau muktamad dengan berkesan. Pembolehubah bebas penutupan boleh diakses sepanjang hayatnya, manakala pembolehubah tangkapan ekspresi lambda hanya boleh diakses dalam Lambda. Pembolehubah bebas penutupan disimpan pada timbunan, manakala pembolehubah ditangkap ungkapan lambda disimpan pada timbunan. Ungkapan Lambda membuat penutupan dan penutupan boleh mengandungi ungkapan Lambda.

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

Perbezaan dan hubungan antara penutupan dan ungkapan Lambda dalam Java

Preface

Penutupan dan ungkapan Lambda adalah kedua-duanya teknologi yang sangat berguna dalam pengaturcaraan Java. Kedua-duanya boleh menangkap pembolehubah tempatan dan menyimpannya di luar skop. Walau bagaimanapun, terdapat beberapa perbezaan utama antara mereka.

Penutupan

Penutupan ialah fungsi yang menangkap pembolehubah yang diisytiharkan dalam persekitaran pelaksanaannya walaupun selepas meninggalkan persekitaran itu. Pembolehubah yang ditangkap ini dipanggil "pembolehubah bebas" penutupan.

Ekspresi Lambda

Ekspresi Lambda ialah fungsi tanpa nama yang dipermudahkan. Mereka boleh menerima parameter dan mengembalikan nilai. Ungkapan lambda juga boleh menangkap pembolehubah yang diisytiharkan dalam persekitaran pelaksanaannya, tetapi hanya jika pembolehubah tersebut akhir atau secara berkesan muktamad. . pembolehubah.

Skop: Pembolehubah bebas penutupan boleh diakses sepanjang hayatnya, walaupun selepas meninggalkan skop di mana ia ditakrifkan. Sebaliknya, pembolehubah tangkapan ungkapan lambda hanya boleh diakses dalam ungkapan lambda.

Pengurusan memori:
    Pembolehubah bebas penutupan disimpan dalam timbunan, manakala pembolehubah ekspresi lambda yang ditangkap disimpan dalam timbunan. .
  • Penutupan boleh mengandungi ungkapan Lambda:
  • Penutupan boleh menyimpan ungkapan Lambda sebagai pembolehubah bebas.
  • Kes praktikal
  • Kes penutupan:

class OuterClass {
    private int x = 10;

    public void printX() {
        Runnable runnable = () -> System.out.println(x);  // 闭包捕获自由变量 x
        runnable.run();
    }
}
Kes ekspresi Lambda:

class OuterClass {
    private final int x = 10;

    public void printX() {
        System.out.println(x);  // Lambda 表达式可以使用 final 变量
    }
}

    Kesimpulan
  • Kesimpulan dalam Javas dan Bothda yang berguna Memahami perbezaan dan hubungan antara mereka adalah penting untuk menulis kod yang cekap dan boleh diselenggara.

Atas ialah kandungan terperinci Perbezaan dan sambungan antara penutupan Java dan ungkapan lambda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn