2 zyf4005 zyf4005 于 2016.04.23 16:41 提问

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

3个回答

Evankaka
Evankaka   Ds   Rxr 2016.04.23 17:25
已采纳

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

zyf4005
zyf4005 明白了,谢谢啊!
大约 2 年之前 回复
qq_27540925
qq_27540925   2016.04.23 16:56

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

xiaoxianer321
xiaoxianer321   2016.11.24 00:42

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于 final 的参数传递
【考题题干】在下面程序标明的位置处插入哪条语句会导致编译错误? public  class  FinalUse  { public  static  void  main(String[]  args)  { int  x  =  0; final  int  y  =  1; int[]  z  =  {  2  }; final  int[]  n  =  {  3  }; Us
Java的Unsafe类及compareAndSwap浅析
最近在看jdk7中java.util.concurrent下面的源码中,发现许多类中使用了Unsafe类中的方法来保证并发的安全性,而java 7 api中并没有这个类的相关介绍,在网上查了许多资料,其中http://ifeve.com/sun-misc-unsafe/这个网站详细的讲解了Unsafe的相关用法,而下面是结合网站中的介绍和具体的AtomicInteger类来讲解一下其相关的用法。
Java面向对象-final类和final方法、final变量(常量)
为什么得需要使用final修饰符继承关系最大的弊端是破坏封装:子类能访问父类的实现细节,而且可以通过方法覆盖的形式修改实现细节。final本身的含义是“最终的,不可改变的”,它可以修饰抽象类,非抽象方法和变量。 注意:构造方法不能使用final修饰,因为构造方法不能被继承,肯定是最终的。final修饰的类:表示最终类,该类不能在有子类。 只要满足以下条件就可以把一个类设计成final类 1、某
Java ,方法,变量前加final 各有什么不一样?
1. 变量前加final     看下图:(第12行, 第13行和第16行报错) 编辑器报错的原因是:第12行, 第13行,变量i 和变量hello前都加上了final 关键字,就说明无论是类成员变量还是内部变量一旦被初始化后,这个不可以再改变了。 请看红色的框中,final变量也可以指向另外一个变量, 另外一个变量的值可以变化,但是这个final变量的值只是初始化时候的另外一个变量
Java中final修饰参数的作用
参考:http://www.cnblogs.com/lan0725/archive/2013/05/24/3097573.html final类型修饰的参数分为两种类型:基本类型 与引用类型  1、在调用的参数内部,无论是基本类型还是引用类型,其值不可改变(引用类型指的引用对象不变)  2、引用类型中属性可变
关于局部内部类访问所在方法的参数或局部变量为什么必须是final的
内部类的种类一共分为四种,我看其他几种内部类的时候思路都是很清晰的,然后我就碰到了这一条:“方法中的内部类可以访问外部类成员。对于方法的参数和局部变量,必须有final修饰才可以访问”。于是我就有点疑惑,为什么必须是final的?         于是我就试了一下访问不是final的变量,发现eclipse给出了错误提示:Cannot refer to the non-final local v
匿名内部类访问方法成员变量需要加final的原因及证明
在java编程中,没用的类定义太多对系统来说也是一个负担,这时候我们可以通过定义匿名内部类来简化编程,但匿名内部类访问外部方法的成员变量时都要求外部成员变量添加final修饰符,final修饰变量代表该变量只能被初始化一次,以后不能被修改。但为什么匿名内部类访问外部成员变量就不允许他修改了呢? 接下来这个例子应该足够把这些说清楚了: 示例代码: public class InnerFinal
作为参数传递“this”变量
<br />问题的来源是这样的,前天在学习“this”的相关用法时,因为书上描述不是很清楚。自己找了网上一篇关于这方面的总结,其中提到this的四种用法:<br />ü        构造方法的重用;<br />ü        消除歧义;<br />ü        返回对象—链式方法的调用;<br />ü        作为参数传递"this”变量-进行回调<br />前面三种都能看懂,可是第四种方法始终没看懂;他的列子是:<br /> <br /> <br />假设有一个容器类和一个部件类,在容器类的
Synchronized块同步变量的误区
我们可以通过synchronized块来同步特定的静态或非静态方法。要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传入synchronized块。下面的代码演示了如何同步特定的类方法: Java代
java中把对象作为参数传递的理解
环境jdk:1.7前言今天在写程序时,发现一个问题://发行结果公告日期 Date olissuePublishDate = o.getDate("olissue_publish_date"); isSpecialDate(olissuePublishDate); map.put("olissue_publish_date",