黑马程序员技术交流社区

标题: final问题 [打印本页]

作者: 执笔梦    时间: 2013-11-29 10:12
标题: final问题
本帖最后由 执笔梦 于 2013-11-29 12:24 编辑

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

int chang2(final int i)
{
     return i+1;//这个不报错。
}
作者: 刘敏    时间: 2013-11-29 10:19
void chang(final int i)
{
     i++;//这个报错。//实际上相当于i=i+1,修改了变量i的值,肯定报错
}

int chang2(final int i)
{
     return i+1;//这个不报错。//仅仅是返回 i+1的值,变量i的值没改变,不报错
}
作者: 李文帅    时间: 2013-11-29 10:27
被final修饰的变量是一个常量,只能赋值一次,赋值后就不能再对其进行操作
对于楼主的代码:
void chang(final int i)
{
    i++;    //++ 是自增运算符,先使用i的值,然后再对其自加1,而i是被final修饰的变量,所以不能进行
               //自增操作,所以程序会报错
}
int chang2(final int i)
{
    return i+1; //这句话只是返回i+1的运算结果,并没有对被final修饰的i进行任何操作,所以不会报错
}
作者: mayor125    时间: 2013-11-29 11:23
你只要记住被final修饰的任何类型的变量,它的值都是不可改变的,也就是相当于是一个常量。

所以final int i里面i的值就是一个常量值了,再使用i++给它自增的话肯定就会报错了。
作者: 努力ing    时间: 2013-11-29 11:59
i++自增,(final int i)限定,所以出错,
下面一个函数你返回的是一个表达式:renturn (i+1)并没有对 i 本身进行改变
将 final  看作一个保险箱,对于改变内部结构的全部报错,但是你可以给保险箱外层加上别的东西
作者: 执笔梦    时间: 2013-11-29 12:23
嗯,谢谢大家。懂了.




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