Я немного смущен о Java lambdas и методе ссылок на методы. . Для бывших, у нас есть этот код:Почему эквивалентное выражение лямбда и ссылка на метод ведут себя по-разному при захвате значения статического поля?
import java.util.function.Consumer;
public class Main {
private static StringBuilder sBuilder = new StringBuilder("1");
public static void main(String[] args) {
Consumer<String> consumer = s -> sBuilder.append(s);
sBuilder = new StringBuilder("2");
consumer.accept("3");
System.out.println(sBuilder);
}
}
Выход:
23
Это работает, как ожидалось, но если заменить
s -> sBuilder.append (s)
с
sB uilder :: добавить
выход будет:
2
У вас какие-либо идеи, как это объяснить? Это не одно и то же? Благодарю.
ли [это] (http://stackoverflow.com/questions/30514995/what-is-the-difference-between-a-lambda-and-a-method-reference-at-a -продолжительность) слишком изогнуто для дубликата? –
@SotiriosDelimanolis немного :) спасибо за полезные ссылки и ответ – j2esu