Лямбда-выражение, объявленное внутри метода имеет доступ к полям класса. И может их менять.
import java.util.function.Consumer;
public class Main {
static int a = 0;
static int b = 1;
public static void main(String[] args) {
Consumer<Integer> lambda = (x) -> {
a = x;
};
lambda.accept(42);
System.out.println(a);
}
} // значение x изменилось
// выведет 42А локальные переменные лямбда может читать, но менять не может
import java.util.function.Consumer;
public class Main {
static int a = 0;
static int b = 1;
public static void main(String[] args) {
int localInt = 11;
Consumer<Integer> lambda = (x) -> {
System.out.println(localInt); // так можно
// localInt = x; // а так нельзя
};
lambda.accept(42);
}
}