要回答这个问题,就不得不先聊聊 final
如果你需要更渗入的了解,你可以通过此链接 http://www.cnblogs.com/dolphin0520/p/3736238.html
接下来谈谈我眼中的 final
1 final 修饰的类不能被继承。
2 Sting 就是一个被 final 修饰的类,我们只能用,不用继承
3 final 不仅可以修饰类,还可以修饰变量,被 final 修饰的变量就是一个常量,只能赋值一次
4 注意 final 和 finally 的区别,final 是修饰类或者变量,finally 是在异常处理中使用,如:try{ }catch(){}finally{}中,finally 的作用一般用于必须处理的事情,如关闭连接
通过上面的解释,我们不难看出 final 的出现就是为了不想改变,而不想改变的理由有两点:设计(安全)或者效率。
final 修饰的类是不被能继承的,所以 final 修饰的类是不能被篡改的。
1、从设计安全)上讲,
1)、确保它们不会在子类中改变语义。String 类是 final 类,这意味着不允许任何人定义 String 的子类。
换言之,
如果有一个 String 的引用,它引用的一定是一个 String 对象,而不可能是其他类的对象。
2)、String 一旦被创建是不能被修改的,
因为 java 设计者将 String 为可以共享的,下面这段是源码中的注释:
2、从效率上讲:
1)、设计成 final,JVM 才不用对相关方法在虚函数表中查询,而直接定位到 String 类的相关方法上,提高了执行效率。
2)、Java 设计者认为共享带来的效率更高。
总而言之,就是要保证 java.lang.String 引用的对象一定是 java.lang.String 的对象,而不是引用它的子孙类,这样才能保证它的效率和安全。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于