博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java面试基础篇——第二篇:String类能为什么不能被继承?
阅读量:7105 次
发布时间:2019-06-28

本文共 819 字,大约阅读时间需要 2 分钟。

hot3.png

public final class String implements java.io.Serializable, Comparable
, CharSequence {}

String类有final修饰符,而final修饰的类是不允许被继承的,实现的细节也无法改变。

String类为何被设计为不能继承?

1.带有 final 修饰符的类是不可派生的。 如 java.lang.String, 为 String 类指定 final 防止了人们覆盖 length() 方法。

2.如果指定一个类为 final,则该类所有的方法都是 final。 java 编译器会寻找机会内联(inline)所有的 final 方法。

3.因为字符串是不可变的,所以是多线程安全的,同一个字符串实例可以被多个线程共享

4.类加载器要用到字符串,不可变性提供了安全性,以便正确的类被加载。譬如你想加载java.sql.Connection类,而这个值被改成了myhacked.Connection,那么会对你的数据库造成不可知的破坏。

5.因为字符串是不可变的,所以在它创建的时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键,字符串的处理速度要快过其它的键对象。这就是HashMap中的键往往都使用字符串。

6.当字符串是不可变时,字符串池才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是可变的,那么String interning将不能实现(String interning是指对不同的字符串仅仅只保存一个,即不会保存多个相同的字符串。),因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变。

转载于:https://my.oschina.net/liululee/blog/1845391

你可能感兴趣的文章
struts2学习笔记1
查看>>
Linux mv命令
查看>>
POJ1088 滑雪
查看>>
nginx php有关cgi.fix_pathinfo导致文件类型错误解析漏洞
查看>>
Mysql创建索引
查看>>
flume channel monitor实现源码分析
查看>>
手机 app 开发的几种方式 ionic 学习思路以及 ionic 新建的项目分析
查看>>
MySQL-索引结构详解
查看>>
轻松理解C语言相关的编译器gcc和g++
查看>>
Oracle通过函数进行进制转化
查看>>
opencart smtp服务器 提示 Error: EHLO not accepted from server
查看>>
搭建Apache+tomcat+负载均衡环境
查看>>
原创文章:卷共享和SAN系统的实现原理与应用价值
查看>>
进程同步(OS课件)
查看>>
CentOS yum出现“Could not retrieve mirrorlist ”的解决办法
查看>>
小提琴调琴
查看>>
Python正则表达式指南下半部
查看>>
【WIN08R2 Active Directory】之二 部署企业中Windows Server 2008 R2额外域控制器
查看>>
Linux终端多窗口工具tmux 的编译安装
查看>>
vmware克隆虚拟机网卡上的问题
查看>>