黑马程序员技术交流社区

标题: 关于final的问题 [打印本页]

作者: 黑马无敌    时间: 2015-6-25 20:25
标题: 关于final的问题
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
作者: 1千克=1024克    时间: 2015-6-25 21:28
引用       final String str = "hello world";   "hello world"本就不能变  而str可以重新赋值, 说明改变的是引用 用final修饰后不能重新赋值 则说明引用不可变   
作者: 十五号的人生    时间: 2015-6-25 21:31
被final修饰的变量它就变成的一个常量,它就不能被重新赋值了
作者: keto    时间: 2015-6-25 22:20
/*
        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的引用,不能重新指向其它的堆空间。也就是其引用不能改变;

        }
}

作者: 安安安    时间: 2015-6-25 22:29
楼上的例子很到位。。




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