黑马程序员技术交流社区
标题:
以下代码中final的变量为什么可以修改
[打印本页]
作者:
luqh
时间:
2015-4-19 15:32
标题:
以下代码中final的变量为什么可以修改
public void click3(View v){
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("请选择爱吃的水果");
final String[] items = {"苹果","栗子","番茄","香蕉"};<font color="#ff0000">
<b> final boolean[] result=new boolean[]{false,true,true,false};</b></font>
builder.setMultiChoiceItems(items, result, new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), items[which], 0).show();
<b> result[which]=isChecked</b>; <font color="#ff0000" size="3"><b>result是final的数组 为啥可以修值?</b></font>
}
});
builder.setPositiveButton("提交", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer buff = new StringBuffer();
for(int i=0;i<result.length;i++){
if(result[i]){
buff.append(items[i]);
}
}
Toast.makeText(getApplicationContext(), "您选择了"+buff.toString(), 0).show();
}
});
复制代码
作者:
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