[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-8-k-kakim-peremennym-est-dostup-u-lyambda-vyrazheniy":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},336,"k-kakim-peremennym-est-dostup-u-lyambda-vyrazheniy",10,"java-8","Java 8+","☕","К каким переменным есть доступ у лямбда-выражений?","Лямбда-выражение может обращаться к переменным из внешней области видимости, но с ограничениями. Доступны три категории переменных: effectively final локальные переменные, поля экземпляра класса и статические переменные.\n\n### Правила доступа\n\n| Категория переменной | Доступ из лямбды | Можно ли изменять? |\n|----------------------|------------------|--------------------|\n| Локальная effectively final | Да (чтение) | Нет |\n| Поле экземпляра | Да (чтение и запись) | Да |\n| Статическая переменная | Да (чтение и запись) | Да |\n| `default`-метод функционального интерфейса | Нет | -- |\n\nEffectively final означает, что переменная не обязана быть помечена `final`, но после инициализации её значение не должно изменяться. Это ограничение существует потому, что лямбда захватывает копию значения локальной переменной, а не ссылку на неё. Если бы переменная менялась, копия стала бы некорректной — поэтому компилятор запрещает модификацию.\n\nПоля класса и статические переменные хранятся в куче (heap), а не на стеке, поэтому лямбда может безопасно читать и изменять их значения.\n\n> **На собеседовании:** часто просят объяснить, почему нельзя модифицировать локальную переменную внутри лямбды. Ключевой аргумент — лямбда захватывает копию значения, а не ссылку на переменную стека, поэтому изменение оригинала привело бы к рассинхронизации.","","junior",[15],"java8",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"К каким переменным есть доступ у лямбда-выражений? — Gymterview","Лямбда-выражение может обращаться к переменным из внешней области видимости, но с ограничениями. Доступны три категории переменных: effectively final локальные ","Лямбда-выражение может обращаться к переменным из внешней области видимости, но с ограничениями. Доступны три категории ",[15,13],"Лямбда-выражение может обращаться к переменным из внешней области видимости, но с ограничениями. Доступны три категории переменных: effectively final локальные переменные, поля экземпляра класса и статические переменные.",true]