为什么字符串类是Final的?

安全和性能考虑(字符串常量池)是String类不可变的主要原因。

案例

  1. 字符串对象被缓存在字符串池中,缓存的字符串被多个客户端共享,这时如果字符串可变。那么某个客户端修改了字符串的值会影响到其它的客户端。字符串的缓存从性能原因来考虑,设计为不可变又是非常重要的。

像下面这样字符串one和two都用字面量"something"赋值。它们其实都指向同一个内存地址。

String one = "someString";
String two = "someString";
img_d14950970b1645ba540e836c409c2dd6.jpe
字符串线程池
  1. 字符串在许多java的类中被广泛使用。在网络连接中,你可以传递主机名和端口号作为字符; 在数据库连接中,你可以传递数据库地址作为字符串; 在File I/O中,你可以通过字符串文件名来打开任何文件。

这种情况下,如果字符串不是不可变的,将会导致严重的安全问题。一些人可以访问任何文件,一旦他有了授权,他可以故意的修改文件名,或者无意的获取到另外一个文件的访问权限。

  1. 在多线程编程中,因为String是不可变的,你就无需考虑字符串的同步问题。不可变性让字符串变的线程安全。

注意:SubString导致的内存泄漏,虽然不是线程问题,但是也要注意

面试题

  1. String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他们之间 == 较的结果.
        String a = "abc";
        String b = "abc";
        String c = new String("abc");
        String d = "ab" + c;

        System.out.println("a == b?" + (a == b));
        System.out.println("a == c?" + (a == c));
        System.out.println("a == d?" + (a == d));
        System.out.println("b == c?" + (b == c));
        System.out.println("b == d?" + (b == d));
        System.out.println("c == d?" + (c == d));

// 输出结果
a == b?true
a == c?false
a == d?false
b == c?false
b == d?false
c == d?false

附录

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/667045

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。