I know that you can't have non final/effective final variable inside the lambda. if this happen there may be case you are working on outdated version of the object. I figured that the compiler didn't complain about this code where the function parameter may not be final :
Updating the post with full code:
public static void main(String[] args) {
Object x=new Object();
x=new Object();// I can reassign x as much as I can
test(x);
}
public static void test(Object x) {
// I can't reassign x here, shouldn't it disallow me to use function parameter ?
List<String> list=new ArrayList<>();
list.forEach(entry->System.out.println(entry+x)); // x here could be not final why the compiler didn't complain ?
}