java中final 变量作为方法的参数?怎么理解?见下面代码

class NiMingLei
{
public static void main(String[] args)
{
Outer out= new Outer();
out.function(7);
out.function(8);
}
}

class Outer
{
static int y=4;
void function(final int a)

{

  class Inter
  {
     void method()
        {
           System.out.println(a);
        }  

    }
  new Inter().method();

}

}

为啥可以编译运行通过:
7
8
不是final a 了吗?不是a的值不能改变了吗?

function里面你就没有更改a啊,out.function(7);
out.function(8);这是两个不同的传入参数了啊

Java是按值传递的,方法的参数和调用的变量不是同一块地址,调用后还是正常输出7和8。

每个方法中的参数,在调用方法的时候都存在栈中,而方法和方法之间的参数(也就是局部变量)之间是互不干扰的,执行完毕时不会保存的。这样调用合情合理。并没有直接对其进行修改