При выполнении некоторых основных упражнений лямбда выход из явно идентичного анонимного внутреннего класса давал мне отличный результат, чем лямбда.
interface Supplier<T> {
T get(T t);
}
Сценарий # 1
Supplier<Integer> s1 = new Supplier<Integer>() {
@Override
public Integer get(Integer t) {
return t;
}
};
Supplier<Integer> s2 = t -> t;
System.out.println(s1.get(2));
System.out.println(s2.get(2));
Вывод 2 и 2. Здесь ничего нового.
Но когда я это делаю:
Сценарий №2
Supplier<Integer> s1 = new Supplier<Integer>() {
@Override
public Integer get(Integer t) {
return t++;
}
};
Supplier<Integer> s2 = t -> t++;
System.out.println(s1.get(2));
System.out.println(s2.get(2));
Выходы 2 и 3
ВОПРОС: Не должны ли оба выхода быть одинаковыми? Я что-то пропустил?
Для полноты: Сценарий № 3
Supplier<Integer> s1 = new Supplier<Integer>() {
@Override
public Integer get(Integer t) {
return ++t;
}
};
Supplier<Integer> s2 = t -> ++t;
System.out.println(s1.get(2));
System.out.println(s2.get(2));
Вывод 3 и 3. Здесь ничего нового не было.
ОБНОВЛЕНИЕ: по-прежнему получается тот же результат от 1.8.0-b132
ОБНОВЛЕНИЕ # 2: Отчет об ошибке: https://bugs.openjdk.java.net/browse/JDK-8038420
ОБНОВЛЕНИЕ # 3: ошибка была исправлена в javac, теперь вы можете получить тот же результат.