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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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.   });
复制代码




11 个回复

倒序浏览
11行代码中result是final的数组 为啥可以修改值?
回复 使用道具 举报
修改的是数组内部的元素,不是地址值~final修饰result只是让result指向的地址不可改变,不是地址内的元素 不可改变
回复 使用道具 举报
涿郡丶二哥 发表于 2015-4-19 15:54
修改的是数组内部的元素,不是地址值~final修饰result只是让result指向的地址不可改变,不是地址内的元素  ...

final的意思是不能给变量重新赋值,数组内部元素变化没有影响地址的变化,所以并没有给result重新赋值~
回复 使用道具 举报
楼上正解  final 给对象 和String类型使用时候 就等于不能给他new新的对象 或者更改对象地址
但是对象内部的值 是可以改变的

如果final修饰的变量是int boolean double 那些数值变量的话 就不能更改内部的值。
回复 使用道具 举报
学习一下
回复 使用道具 举报
过来学习!!!
回复 使用道具 举报
学习,学习
回复 使用道具 举报
赞...................................................
回复 使用道具 举报
学习了,原来final修饰的是内存地址值。
回复 使用道具 举报
final修饰的是地址
回复 使用道具 举报
luqh 中级黑马 2015-4-20 08:36:42
12#
明白了,大侠厉害
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马