码迷,mamicode.com
首页 > 其他好文 > 详细

被final关键字坑了

时间:2015-01-06 10:09:02      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:编程   java   final   


        一直都傻傻的以为用final关键字定义的都是不可变的。没想到的是对基本类型来说,这是一直成立的。

        但是对于final修饰的对象,仍然可以修改对象里面的对象和成员变量。不变的只是当前对象的地址。

        昨天我还信誓旦旦的和被人说我用final修饰对象了,它是不可变的,它里面的数值是不会被修改的(其实是可以被修改的)!!!想想就觉得惭愧,特以此文告诫自己,在不明事情真相的情况下不要妄下结论。

        对于基本类型,例如final int x=1,这时x是“真正的”不可变,即进行x=0会显示编译错误。(它里面没有存有其它对象。)

        对于非基本类型,例如 final Date date = new Date(),这时进行date.setYear(2015)是不会有任何编译错误的。因为该对象的地址并未被修改。但是如果进行date = null,就会有编译错误,因为此时对象date的地址发生了变化。


        用比较通俗的话来说就像:高富帅可以有N个小蜜,但是只有一个老婆,这个老婆(对象)是不变的,但是老婆(对象)身上的其它对象(属性)穿什么衣服、用什么化妆品(对象)是会变化。

被final关键字坑了

标签:编程   java   final   

原文地址:http://blog.csdn.net/pistolove/article/details/42427945

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!