开发者社区> 问答> 正文

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的值不能改变了吗?

展开
收起
蛮大人123 2016-06-13 14:28:52 2482 0
2 条回答
写回答
取消 提交回答
  • int a 是本地变量,因为java底层的机制不能存取本地变量,这样导致内部类,没有办法取过来,所以java用了一个小聪明,直接把本地变量的refrenece拷贝到内部类。
    因为这个小聪明,一般容易让人误解。所以他在编译器里面,加上了一个final,让你不要改变这个值,然你只读不能存,这样感觉就好了

    2019-07-17 19:35:54
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    function里面你就没有更改a,out.function(7);out.function(8);这是两个不同的传入参数,Java是按值传递的,方法的参数和调用的变量不是同一块地址,调用后还是正常输出7和8。

    2019-07-17 19:35:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载