Maison  >  Article  >  Java  >  La différence et le lien entre les fermetures Java et les expressions lambda

La différence et le lien entre les fermetures Java et les expressions lambda

PHPz
PHPzoriginal
2024-05-01 17:57:02646parcourir

Les fermetures et les expressions lambda peuvent capturer des variables locales en Java : les fermetures peuvent capturer des variables libres, tandis que les expressions lambda ne peuvent capturer que des variables finales ou effectivement finales. Les variables libres d'une fermeture sont accessibles tout au long de sa durée de vie, alors que les variables capturées d'une expression lambda ne sont accessibles que dans Lambda. Les variables libres d'une fermeture sont stockées sur le tas, tandis que les variables capturées d'une expression lambda sont stockées sur la pile. Les expressions Lambda créent des fermetures, et les fermetures peuvent contenir des expressions Lambda.

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

La différence et le lien entre les fermetures et les expressions Lambda en Java

Préface

Les fermetures et les expressions Lambda sont toutes deux des technologies très utiles dans la programmation Java. Les deux peuvent capturer des variables locales et les stocker en dehors de la portée. Il existe cependant quelques différences essentielles entre eux.

Fermetures

Une fermeture est une fonction qui capture les variables déclarées dans son environnement d'exécution même après avoir quitté cet environnement. Ces variables capturées sont appelées « variables libres » de la fermeture.

Expressions Lambda

Les expressions Lambda sont des fonctions anonymes simplifiées. Ils peuvent accepter des paramètres et renvoyer une valeur. Une expression lambda peut également capturer des variables déclarées dans son environnement d'exécution, mais seulement si ces variables sont finales ou effectivement finales.

Différences

Bien que les fermetures et les expressions Lambda puissent capturer des variables locales, il existe quelques différences clés entre elles :

  • Variables libres : Les fermetures peuvent capturer des variables libres, tandis que les expressions Lambda ne peuvent capturer que la finale ou effectivement la finale. variables.
  • Scope : Les variables libres d'une fermeture sont accessibles tout au long de leur durée de vie, même après avoir quitté le scope dans lequel elles sont définies. En revanche, les variables de capture d'une expression lambda ne sont accessibles que dans l'expression lambda.
  • Gestion de la mémoire : Les variables libres des fermetures sont stockées dans le tas, tandis que les variables capturées des expressions lambda sont stockées dans la pile.

Connexion

Malgré ces différences, les fermetures et les expressions lambda sont toujours étroitement liées :

  • Les expressions lambda peuvent créer des fermetures : Lorsqu'une expression lambda capture une variable libre, elle crée une fermeture.
  • Les fermetures peuvent contenir des expressions Lambda : Les fermetures peuvent stocker des expressions Lambda sous forme de variables libres.

Cas pratique

Cas de fermeture :

class OuterClass {
    private int x = 10;

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

Cas d'expression Lambda :

class OuterClass {
    private final int x = 10;

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

Conclusion

Les fermetures et les expressions Lambda sont des techniques utiles en Java. Comprendre les différences et les liens entre eux est important pour écrire un code efficace et maintenable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn