您的位置:首页 > 职场人生

【一道面试题】使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

2018-06-02 15:49 239 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013781343/article/details/80548378

刚看到这道题时,自己也是有点懵逼的,也不清楚答案,便赶紧去百度final的用法,然后看了很多回答和实例才只知道了答案!
首先我们来看下 final关键字的用法,然后再来回答这道题!
1.final 关键字可以用来修饰 类,方法和变量(成员变量和局部变量)
那么我们来讨论下,final关键字几种用法

  • 修饰类
    final修饰类时,说明该类你不想被别人继承!一个类不被别的类继承就可以使用final来修饰,测试结果如下图

    注意 final类中的所有成员方法都会被隐式地指定为final方法。

  • 修饰方法
    当一个方法被final修饰后,就代表该方法无法被重写,如果你想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的,可以看下图示例

    你就无法重写该方法了,但是!同时注意 如果父类的 final修饰的方法设置为private,则子类可以写一个同名的方法,此时 ,该同名的方法不再产生final的报错,而是在子类重新定义了一个方法(注:类的private方法会隐式地被指定为final方法。)见下图

  • 修饰变量
    这里就是比较重要的点了,也和我们开头说的那道面试题有很大的关系,理解了这个,就不难理解这道面试题的答案了
    被final修饰的变量其实就相当于定义了一个常量,无法被修改的变量,如果final修饰的是一个基本数据类型的变量,那么这个变量的值就定了,不能变了,而如果修饰的是一个引用变量,那么该变量存的是一个内存地址,该地址就不能变了,但是该内存地址所指向的那个对象还是可以变的,就像你记住了人家的门牌号,但你不能管人家家里人员数量,有个例子 看下图

    但是你可以改那个对象的内容!见下图

还有的人给方法定义的参数是 final类型的,是不想别人在方法内部修改参数的值,如果final修饰的是一个基本类型,那么是可以的,如果修饰的是引用类型,那么便不行了,因为就如上文那个str.append 对象的内容是可以变化的!

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐