String类为什么是final的
来源:互联网 发布:现货黄金分析软件 编辑:程序博客网 时间:2024/05/16 19:27
首先,先得清楚 final 这个关键字。
final的出现就是为了为了不想改变,而不想改变的理由有两点:设计(安全)或者效率。
final 修饰的类是不被能继承的,所以 final 修饰的类是不能被篡改的。
了解了这一点,我们再看看问题:
1、从设计安全)上讲,
1)、确保它们不会在子类中改变语义。String类是final类,这意味着不允许任何人定义String的子类。
换言之,
如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象。
2)、String 一旦被创建是不能被修改的,
因为 java 设计者将 String 为可以共享的,下面这段是源码中的注释:
/** * The {@code String} class represents character strings. All * string literals in Java programs, such as {@code "abc"}, are * implemented as instances of this class. * <p> * Strings are constant; their values cannot be changed after they * are created. String buffers support mutable strings. * Because String objects are immutable they can be shared. For example: * String str = "abc"; * is equivalent to: * char data[] = {'a', 'b', 'c'}; * String str = new String(data); */ 对应翻译:/***字符串类表示字符串。所有*在java程序中的字符串,如“ABC”,是*实现为这个类的实例。**字符串是常量,它们的值在它们之后不能更改*创建。支持可变字符串字符串缓冲区。*因为字符串对象是不可改变的,它们可以共享。
2、从效率上讲:
1)、设计成final,JVM才不用对相关方法在虚函数表中查询,而直接定位到String类的相关方法上,提高了执行效率。
2)、Java设计者认为共享带来的效率更高。
总而言之,就是要保证 java.lang.String 引用的对象一定是 java.lang.String的对象,而不是引用它的子孙类,这样才能保证它的效率和安全。
看了上面的,其实还可以看看这3个文章,有个常量池的概念。不仅仅是String类,还有简单数据封装类。加深下理解,扩展下知识面。
java,西特。
Java常量池的大概理解
Java常量池的面试题
JavaString中理解起来模糊的东西,我来给我扫扫盲。(String类的intern(),equal(). == )
1 0
- String类为什么是final类型的
- String类为什么是final的。
- string类为什么是final的
- String类为什么是final的?
- String类为什么是final的
- String类为什么是final的
- String类为什么是final类型的
- String类为什么是final的
- string为什么是final的
- String类为什么是final
- 为什么String类是final?
- String类为什么是final
- String类为什么是final
- String类为什么是final
- String类为什么是final
- String 为什么是final
- 追根溯源---java.lang.String类为什么是final的?
- java语言String这个神奇的类为什么是final
- web.xml配置,避免乱码
- 编译错误error: stray‘\343’in program的解决方法
- linux arp攻击 源码示例,编译器gcc
- 文章标题
- Python练习100例-33
- String类为什么是final的
- 合并果子之哈夫曼树
- JAVA随机数的使用
- 谷歌浏览器不能更新,及卸载重装的方法
- Java 并发专题 : Timer的缺陷 用ScheduledExecutorService替代
- C/C++中的有符号和无符号的位运算问题
- 深入剖析MMORPG游戏服务器端的设计
- iOS开源项目
- sublime text3配置sublimelinter配合pep8和pyflakes检查python书写规范和语法