Lambda behaving differently than anonymous inner class

Victor Antunes victor.antunes.ignacio at gmail.com
Wed Mar 26 15:03:19 UTC 2014


Hello all,

This e-mail is a follow-up to a question I've posted on StackOverflow:
http://stackoverflow.com/questions/22648079/lambda-behaving-differently-than-anonymous-inner-class


I'm relatively new to Java, and decided to pick up on lambda since the past
few days. So I wrote a very simple anonymous inner class and wrote an
equivalent lambda.

However, the lambda output was different, and it very strongly appears to
be a bug.

Given:

interface Supplier<T> {

    T get(T t);}

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));

The output is 2 and 3, NOT 2 and 2, as one would expect.

More info, including discussion about bytecode is available at the SO link
above.

I'm also new to this list, so apologies if I've broken any mailing list
etiquette.

-- 
Kind regards,

Victor Antunes


More information about the lambda-dev mailing list