Effectively final 到底什么意思

public class Closure3 {
IntSupplier makeFun(int x) {
int i = 0;
i++;
x++;
int iFinal = i;
int xFinal = x;
return () -> iFinal + xFinal;
}
}

为什么在java 8 里面 这个 i++和x++ 可以编译成功,我知道是 Effectively final,可是这里面i 和 x到底值有没有改变,为什么?

形参i和x的值改变了,但是实参i没有改变,这个本质是对java引用传递和值传递的理解,如果是原始类型,传递的是这个值的拷贝
可以参考这篇博客:https://www.zhihu.com/question/31203609/answer/2902350174?utm_id=0