Here is an article that explains exactly how lambda expressions are compiled:
Java 8 Lambdas - A Peek Under the Hood
And here another (older, from 2012) article from the horse's mouth (Brian Goetz, who led the lambda project at Oracle):
Translation of Lambda Expressions
Note: This is not really simple to understand; but the most important thing to know is that it's not as simple as replacing the lambda by an anonymous inner class. Other things are done, involving the
invokedynamic bytecode instruction, which make lambdas more efficient than anonymous inner classes. So, that is in itself a good reason to use lambda expressions instead of anonymous inner classes (besides the fact that lambda expressions enable you to write shorter and more readable code compared to anonymous inner classes).