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