Почему эквивалентные лямбда-выражения и ссылки на методы ведут себя по-разному при захвате значения статического поля?
Я немного запутался в лямбдах Java и поведении ссылок на методы. Например, у нас есть этот код:
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)
с
sBuilder :: Append
вывод будет:
2
У вас есть идеи, как это объяснить? Это не одно и то же? Благодарю.