Рассмотрим следующий фрагмент кода:
public static Object o = new Object();
public static Callable x1() {
Object x = o;
return () -> x;
}
public static Callable x2() {
return () -> o;
}
Метод x2()
всегда будет возвращать один и тот же объект lamba, а x1()
всегда будет создавать новый:
System.out.println(x1());
System.out.println(x1());
System.out.println(x2());
System.out.println(x2());
распечатает что-то вроде этого:
TestLambda$$Lambda$1/[email protected]
TestLambda$$Lambda$1/[email protected]
TestLambda$$Lambda$2/[email protected]
TestLambda$$Lambda$2/[email protected]
Где (в спецификации JVM я предполагаю?) это правило повторного использования лямбда описано? Как JVM решает, где их использовать или нет?