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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪小照 中级黑马   /  2012-10-21 15:31  /  1875 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汪小照 于 2012-10-23 17:11 编辑

被final修饰的变量可以是成员变量,也可以是局部变量,但是不是被finall修饰的变量只能赋值一次,因为在听毕老师讲课的时候他说被final修饰的变量只能赋值一次,
而在看张老师的视频时发现被final修饰的变量在for循环中被赋了无数次都没出错。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

8 个回复

倒序浏览
用final修饰的变量,的确是只赋值一次,不可以在改变。  
但在for循环里的可以被无数次原因是,在for循环里的属于局部变量,所以是可以不断改变的。 不知道你明白否!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
有这回事?一般情况被final修饰的变量只能赋值一次后不能改变了!FOR循环里面的局部变量真的被final修饰了吗?循环里用的是局部变量还是全局变量?请把程序打出来,大家探讨下...谢谢!{:soso_e100:}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
它估计是把局部变量用final修饰是给for循环的内部类来访问,因为非静态方法和里面的参数都是放在栈内存中,执行一遍就会被回收,故可以重新赋值,这是我的理解

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
我虽然没记得哪次视频是这样,
但是final确实只能被赋值一次,之后final修饰的引用就不能改变了。
注意,是引用。

比如这个引用指向了一个对象,这个对象是可以改变的。
但是你不能把这个引用指向另一个对象。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
嗯,明白来了你说的了
回复 使用道具 举报
被final修饰的变量只能被赋值一次,就以常量的形式存在。但是被final修饰的对象,对象的引用不能指向新的对象,但是他的对象可以被改变。

class Demo
{
        int i =5;
}

class FinalDemo
{
      Demo  a = new Demo();
       public void add(final Demo a)   //final修饰对象a      
{
        //a = new Demo();   //报错,对象引用a不能指向新的对象
        int i = a.i+1;        //对象a中成员变量i增加1
}
}
回复 使用道具 举报
任雷彬 发表于 2012-10-21 20:58
被final修饰的变量只能被赋值一次,就以常量的形式存在。但是被final修饰的对象,对象的引用不能指向新的对 ...

被final修饰的对象,对象的引用不能指向新的对象,但是他的对象可以被改变 这句话我很认同,
但是被final修饰的变量只能赋值一次,那为什么下面的代码不报错呢?
public class FinalTest {
        public static void main(String [] args)
        {
                for(int x=0;x<=10;x++)
                {
                        final int y =x;
                        System.out.println(y);
                }
        }

}
回复 使用道具 举报
汪小照  发表于 2012-10-22
被final修饰的对象,对象的引用不能指向新的对象,但是他的对象可以被改变 这句话我很认同,
但是被final修饰的变量


你在for循环中定义的局部变量 y,被final修饰是固定不变的,但是
赋给 y的是局部变量x的变量名,x是不变的,但是x的值随着循环在变化。

final int y = x;// x变量名不变,但是随着循环for(int x=0;x<=10;x++)
                     //          x变量的值在变化的

final  int y = 5;//局部变量 y 初始化为具体实际值,则 y 就以常量存在。
    试比较一下final int y =x;与 final int y = 5区别吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马