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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 执笔梦 金牌黑马   /  2013-11-29 10:12  /  1041 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 执笔梦 于 2013-11-29 12:24 编辑

不好意思,昨天有提问这个问题,不过我写错了,没注意...
问题:在两个方法中,同样是final参数,为什么一个的参数可变,一个可变.
void chang(final int i)
{
     i++;//这个报错。
}

int chang2(final int i)
{
     return i+1;//这个不报错。
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
void chang(final int i)
{
     i++;//这个报错。//实际上相当于i=i+1,修改了变量i的值,肯定报错
}

int chang2(final int i)
{
     return i+1;//这个不报错。//仅仅是返回 i+1的值,变量i的值没改变,不报错
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

回复 使用道具 举报
被final修饰的变量是一个常量,只能赋值一次,赋值后就不能再对其进行操作
对于楼主的代码:
void chang(final int i)
{
    i++;    //++ 是自增运算符,先使用i的值,然后再对其自加1,而i是被final修饰的变量,所以不能进行
               //自增操作,所以程序会报错
}
int chang2(final int i)
{
    return i+1; //这句话只是返回i+1的运算结果,并没有对被final修饰的i进行任何操作,所以不会报错
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
你只要记住被final修饰的任何类型的变量,它的值都是不可改变的,也就是相当于是一个常量。

所以final int i里面i的值就是一个常量值了,再使用i++给它自增的话肯定就会报错了。
回复 使用道具 举报
i++自增,(final int i)限定,所以出错,
下面一个函数你返回的是一个表达式:renturn (i+1)并没有对 i 本身进行改变
将 final  看作一个保险箱,对于改变内部结构的全部报错,但是你可以给保险箱外层加上别的东西
回复 使用道具 举报
嗯,谢谢大家。懂了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马