¿Por qué la expresión lambda equivalente y la referencia de método se comportan de manera diferente al capturar el valor del campo estático?
Estoy un poco confundido sobre el comportamiento de las referencias de método y lambdas de Java. Por ejemplo, tenemos este código:
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);
}
}
Salida:
23
Esto funciona como se esperaba, pero si reemplazamos
s -> sBuilder.append (s)
con
sBuilder :: agregar
la salida será:
2
¿Tienes alguna idea de cómo explicar esto? ¿Esto no es lo mismo? Gracias.