A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在下面程序标明的位置处插入哪条语句会导致编译错误?
  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

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

4 个回复

倒序浏览
x++;会导致编译错

评分

参与人数 1黑马币 +6 收起 理由
狼王 + 6 赞一个!

查看全部评分

回复 使用道具 举报
这个问题问的真好,是个点,我都忘了,回去看了看。发现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. }
复制代码
这样就不容易被迷惑了


评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!继续努力哈。。。

查看全部评分

回复 使用道具 举报
x++/方法接收数据时将其定义为final,所以编译会报错
y++/方法接收数据时将fianl定义为默认的int类型,所以可以进行自增
同样类型的fianlz[0]++不会报错是因为final定义的是数组元素的类型,但在z[0]++并没有把其自增值赋给数组,也就是说数组数据没有变化,所以是正确的

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主不要被主函数中final修饰迷惑,主函数中的都是局部变量,不会作用全局,调用方法时,只根据该方法传入参数列表定义理解就可以了,参数列表中被final修饰的变量,在该方法中不可改变

评分

参与人数 1黑马币 +12 收起 理由
狼王 + 12 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马