---
title: 'Warum ein Lambda-Ausdruck keine lokale Variablen/Parametervariablen beschreiben kann'
url: 'https://tutego.de/blog/javainsel/2018/03/warum-ein-lambda-ausdruck-keine-lokale-variablen-parametervariablen-beschreiben-kann'
markdown: 'https://tutego.de/blog/javainsel/2018/03/warum-ein-lambda-ausdruck-keine-lokale-variablen-parametervariablen-beschreiben-kann.md'
date: '2018-03-04'
description: 'Lambda-Ausdrücke können lokale Variablen nur lesen und nicht beschreiben. Der Grund hat etwas mit der Art und Weise zu tun, wo Variablen gespeichert werden: Objekt- und statische Variablen „leben“ auf dem Heap lokale Variablen und Parameter „leben“ auf dem Stack. Wenn nun Threads ins Spiel kommen i…'
taxonomy:
  category:
    - Insel
---

# Warum ein Lambda-Ausdruck keine lokale Variablen/Parametervariablen beschreiben kann

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Warum ein Lambda-Ausdruck keine lokale Variablen/Parametervariablen beschreiben kann

04.03.2018 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Lambda-Ausdrücke können lokale Variablen nur lesen und nicht beschreiben. Der Grund hat etwas mit der Art und Weise zu tun, wo Variablen gespeichert werden: Objekt- und statische Variablen „leben“ auf dem Heap lokale Variablen und Parameter „leben“ auf dem Stack. Wenn nun Threads ins Spiel kommen ist es nicht unüblich, dass unterschiedliche Threads die Variablen vom Heap nutzen; dafür gibt es Synchronisationsmöglichkeiten. Allerdings kann ein `Thread` nicht auf lokale Variablen eines anderen Threads zugreifen, denn ein `Thread` hat erst einmal keinen Zugriff auf den Stack-Speicher eines anderen Threads. Grundsätzlich wäre das möglich, allerdings wollten die Oracle-Entwickler diesen Pfad nicht gehen. Beim Lesezugriff wird tatsächlich eine Kopie angelegt, sodass sie für einen anderen `Thread` sichtbar ist.

Die Einschränkung, dass äußere lokale Variablen von Lambda-Ausdrücken nur gelesen werden können, ist an sich etwas Gutes, denn die Beschränkung minimiert Fehler bei nebenläufiger Ausführung von Lambda-Ausdrücken: arbeiten mehrere Threads Lambda-Ausdrücke ab, und beschreiben diese eine lokale Variable, müsste andernfalls eine `Thread`-Synchronisation her.

Grundsätzlich verbietet das Schreiben von lokalen Variablen aus Lambda-Ausdrücken heraus aber nicht jede Programmiersprache. In C# kann ein Lambda-Ausdruck lokale Variablen beschreiben, sie leben dann nicht mehr auf dem Stack.

Kategorien: [Insel](https://tutego.de/blog/javainsel/category/insel/)

## 1 Kommentare

**foomotor** · [05.03.2018 08:34](#comment-655991)

Stichwort "effectively final"?

Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [CompletionService und ExecutorCompletionService](https://tutego.de/blog/javainsel/2018/03/completionservice-und-executorcompletionservice.md)
- Next: [Bald neue JDBC-Async-Bibliothek im Paket java.sql2?](https://tutego.de/blog/javainsel/2018/03/bald-neue-jdbc-async-bibliothek-im-paket-java-sql2.md)
