黑马程序员技术交流社区

标题: 在下面程序标明的位置处插入哪条语句会导致编译错误? [打印本页]

作者: lovecx24    时间: 2013-11-30 20:07
标题: 在下面程序标明的位置处插入哪条语句会导致编译错误?
在下面程序标明的位置处插入哪条语句会导致编译错误?
  1. public class TestFinal{
  2. public static void main(String[] args){
  3.    int x=0;
  4.   final int y=1;
  5.   int[] z={2};
  6.   final int[] n={3};
  7.   use(x,y,z,n);
  8. }
  9. static void use(final int x,int y, final int[] z,int[] n){
  10. //插入内容
  11. }
  12. }
复制代码

A. x++
B. y++
C. y=x
D. z[0]++
E. n[0]++
F. z=n

作者: 石头6004    时间: 2013-11-30 20:19
x++;会导致编译错
作者: 胡陈思    时间: 2013-11-30 21:21
这个问题问的真好,是个点,我都忘了,回去看了看。发现Java中方法中传递参数时,
基本数据类型传递的是数据的值,
引用数据类型传递的是对对象的引用,就是地址值,而不是对象本身。
所以,传参后,y和z都被finall修饰成了常量,所以不能 y++自加 和 z=n再赋值。
你可以看成
  1. public class Test{
  2. public static void main(String[] args){
  3.    int x=0;
  4.   final int y=1;
  5.   int[] z={2};
  6.   final int[] n={3};
  7.   use(x,y,z,n);
  8. }
  9. static void use(final int a,int b, final int[] c,int[] d){
  10.        
  11. }
  12. }
复制代码
这样就不容易被迷惑了



作者: 半夜雨半夜雨    时间: 2013-11-30 21:27
x++/方法接收数据时将其定义为final,所以编译会报错
y++/方法接收数据时将fianl定义为默认的int类型,所以可以进行自增
同样类型的fianlz[0]++不会报错是因为final定义的是数组元素的类型,但在z[0]++并没有把其自增值赋给数组,也就是说数组数据没有变化,所以是正确的
作者: 王东旭    时间: 2013-11-30 21:39
楼主不要被主函数中final修饰迷惑,主函数中的都是局部变量,不会作用全局,调用方法时,只根据该方法传入参数列表定义理解就可以了,参数列表中被final修饰的变量,在该方法中不可改变




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2