黑马程序员技术交流社区

标题: 以下代码中final的变量为什么可以修改 [打印本页]

作者: luqh    时间: 2015-4-19 15:32
标题: 以下代码中final的变量为什么可以修改
  1. public void click3(View v){
  2.   AlertDialog.Builder builder = new Builder(this);
  3.   builder.setTitle("请选择爱吃的水果");
  4.   final String[] items = {"苹果","栗子","番茄","香蕉"};<font color="#ff0000">
  5. <b>  final boolean[] result=new boolean[]{false,true,true,false};</b></font>
  6.   builder.setMultiChoiceItems(items, result, new OnMultiChoiceClickListener() {
  7.    @Override
  8.    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
  9.     // TODO Auto-generated method stub
  10.     Toast.makeText(getApplicationContext(), items[which], 0).show();
  11. <b>    result[which]=isChecked</b>; <font color="#ff0000" size="3"><b>result是final的数组 为啥可以修值?</b></font>
  12.    }
  13.   });
  14.   builder.setPositiveButton("提交", new OnClickListener() {
  15.    
  16.    @Override
  17.    public void onClick(DialogInterface dialog, int which) {
  18.     StringBuffer buff = new StringBuffer();
  19.     for(int i=0;i<result.length;i++){
  20.      if(result[i]){
  21.       buff.append(items[i]);
  22.      }
  23.     }
  24.     Toast.makeText(getApplicationContext(), "您选择了"+buff.toString(), 0).show();
  25.    }
  26.   });
复制代码





作者: luqh    时间: 2015-4-19 15:33
11行代码中result是final的数组 为啥可以修改值?
作者: 涿郡丶二哥    时间: 2015-4-19 15:54
修改的是数组内部的元素,不是地址值~final修饰result只是让result指向的地址不可改变,不是地址内的元素 不可改变
作者: 涿郡丶二哥    时间: 2015-4-19 15:56
涿郡丶二哥 发表于 2015-4-19 15:54
修改的是数组内部的元素,不是地址值~final修饰result只是让result指向的地址不可改变,不是地址内的元素  ...

final的意思是不能给变量重新赋值,数组内部元素变化没有影响地址的变化,所以并没有给result重新赋值~
作者: q8387811    时间: 2015-4-19 16:03
楼上正解  final 给对象 和String类型使用时候 就等于不能给他new新的对象 或者更改对象地址
但是对象内部的值 是可以改变的

如果final修饰的变量是int boolean double 那些数值变量的话 就不能更改内部的值。
作者: 邓士林    时间: 2015-4-19 17:43
学习一下
作者: 牵猪散步    时间: 2015-4-19 18:24
过来学习!!!
作者: 知来者之可追    时间: 2015-4-19 19:20
学习,学习
作者: 缤纷落叶    时间: 2015-4-19 19:25
赞...................................................
作者: 曾宇    时间: 2015-4-19 19:28
学习了,原来final修饰的是内存地址值。
作者: 董广斌    时间: 2015-4-19 19:38
final修饰的是地址
作者: luqh    时间: 2015-4-20 08:36
明白了,大侠厉害




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