Final关键词形参传值

Final关键词形参传值说明


【考题题干】在下面程序标明的位置处插入哪条语句会导致编译错误?
public class FinalUse {
public static void main(String[] args) {
int x = 0;
final int y = 1;
int[] z = { 2 };
final int[] n = { 3 };
Use(x, y, z, n);
}
static void Use(final int x, int y, final int[] z, int[] n) {
// 插入内容
}
}

请考虑下面的选项:
A.x++
B.y++
C.y=x
D.z[0]++
E.n[0]++
F.z=n

【试题分析】声明形参的时候可以在方法调用的参数调用之前加上关键字 final。 final 参数也可以叫
做空白最终变量,也可以当作常量。即在对其赋值之前(例如方法调用之前),该变量为空(为初始化),
赋值之后,在该变量的生存周期内只能调用再也不能改变变量的值。final 变量只可以被赋值一次。在方
法调用时,final 形式参数被赋予实际参数的值。在方法内部,不能对 final 参数进行重新赋值或者是修
改。
在 Use 方法中,x 是 final 类型的,因此 A 选项中 x++表示是可以改变 x 的值的,所以 A 会导致编
译错误。y,n[0]是 int 变量,所以 y, n[0]值是可以变化的,因此插入 B 和 E 选项都会编译通过的。C 选
项是把 x 的值赋给 y,改变是 y 的内容,不会改变 x 的值,所以插入 C 选项会编译通过的。在 D 选项中,
由于 z 是个 int 型数组,它是属于复合类型,在进行值传递的时候,传给形参的是地址值,而不是内容,
因此 final int[] z 就表示 z 数组不能在指向其他的数组对象,但是 z 数组中的内容是可以改变的,因此 z
[0]++表示的是内容上的改变,所以是没有错误的,可以编译通过的。F 选项正好与 D 选项相反,同理,
F 就是错误的。
【参考答案】AF

本习题参考网站:https://blog.csdn.net/sanqima/article/details/25624097

下面是个人对本题目的理解:

简单举例解说:
public class AN {
public static void main(String args[]) {
method1(3);
}
public static void method1(final int j) {//传入此值时,已经将j初始为3,则不可在定义
j = 5; //此处报错
System.out.println(j);
}

代码片.

public class AN{
	 public  static  void  main(String[] args)  {
		  int  x  =  5;
	      final  int  y  =  1;
	      int[]  z  =  {  2  };
	      final  int[]  n  =  {  3  };
	      Use(x,  y,  z,  n);		
	    }
	 
	  static  void  Use(final  int  x,  int  y,  final  int[]  z,  int[]  n)  {
		  System.out.println(x);//传入时已经默认该地址值的初始值5
		  y=x; //变量,地址值可变,不算固定
		  System.out.println(y);
		  z[0]++;
		  System.out.println(z[0]); //每次生成的z的地址值会变,但是该地址值的数值时固定的
		  n[0]++;
		  System.out.println(n[0]);//同y
		  /*y++;
		  y=x;
		  z[0]++;
		  n[0]++;
		  z=n;*/
		  System.out.println(z);//传入时,已经默认赋予该地址值的初始值为2,所以不可改变
	        //  插入内容
	     }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值