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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马无敌 中级黑马   /  2015-6-25 20:25  /  655 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

4 个回复

倒序浏览
引用       final String str = "hello world";   "hello world"本就不能变  而str可以重新赋值, 说明改变的是引用 用final修饰后不能重新赋值 则说明引用不可变   
回复 使用道具 举报
被final修饰的变量它就变成的一个常量,它就不能被重新赋值了
回复 使用道具 举报
/*
        final修饰局部变量:

        1.普通局部变量:其值不能更改;
        2.方法的形参,可以定义为final的:
*/
class Demo
{
        public static void main(String[] args)
        {
                int x = 10;
                show(x);

                int[] intArray = {1,3,2,43,4};
                show(intArray);
                System.out.println("intArray[0] : " + intArray[0]);
        }

        public static void show(){
                final int num = 10;
        //        num = 20;//编译错误。不能更改final变量的值;
        }

        public static void show(final int a){//形参是基本数据类型
                System.out.println("a = " + a);
        //        a = 20;//编译错误,不能更改形参a 的值;
        }
        public static void show(final int[] arr){//形参是引用数据类型
                arr[0] = 1000;//OK的,堆空间中的值是可以改变的
                arr = new int[2];//编译错误。一个final的引用,不能重新指向其它的堆空间。也就是其引用不能改变;

        }
}
回复 使用道具 举报
楼上的例子很到位。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马