当前位置: 首页 > news >正文

湘潭网站制作建设怎么制作网站搜索窗口

湘潭网站制作建设,怎么制作网站搜索窗口,网站密钥怎么做,淄博网站制作制作目录 概述 String是如何实现不可变的 String为何设计成不可变的 1.缓存和性能优化 2.安全性 3.线程安全性 4.API设计和预测性能 概述 String类的不可变性意味着一旦创建了一个字符串对象,它的值就不能被修改。 String是如何实现不可变的 查看源码 public …

目录

概述

String是如何实现不可变的

String为何设计成不可变的

1.缓存和性能优化

2.安全性

3.线程安全性

4.API设计和预测性能


概述

String类的不可变性意味着一旦创建了一个字符串对象,它的值就不能被修改。

String是如何实现不可变的

查看源码

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {// 字符数组value用于存储字符序列private final char value[];// substring方法返回一个新的String对象public String substring(int beginIndex) {if (beginIndex < 0 || beginIndex > value.length) {throw new StringIndexOutOfBoundsException(beginIndex);}int subLen = value.length - beginIndex;if (subLen < 0) {throw new StringIndexOutOfBoundsException(subLen);}return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);}// concat方法用于连接字符串并返回一个新的String对象public String concat(String str) {int otherLen = str.length();if (otherLen == 0) {return this;}int len = value.length;char buf[] = Arrays.copyOf(value, len + otherLen);str.getChars(buf, len);return new String(buf, true);}
}

1.String类被声明为final,这意味着它不能被继承。那么他里面的方法就是没办法被覆盖的。


2.用final修饰字符串内容的char[] (从JDK 1.9开始,char[]变成了byte[]),由于该数组被声明为final,一旦数组被初始化,就不能再指向其他数组


3.String类没有提供用于修改字符串内容的公共方法。例如,没有提供用于追加、删除或修改字符的方法。如儿果需要对字符串进行修改,会创建一个新的String对象。

String为何设计成不可变的

为什么要把String设计成不可变的呢? 有什么好处呢?


这个问题,困扰过很多人,甚至有人直接问过Java的创始人James Gosling。
在一次采访中James Gosling被问到什么时候应该使用不可变变量,他给出的回答是:
I would use an immutable whenever I can(我会尽可能使用不可变的。)


那么,他给出这个答案背后的原因是什么呢? 是基于哪些思考的呢?
其实,主要是从缓存、安全性、线程安全和性能等角度出发的。

1.缓存和性能优化

字符串是使用最广泛的数据结构。大量的字符串的创建是非常耗费资源的,所以,Java提供了对字符串的缓存功能,可以大大的节省堆空间。
JVM中专门开辟了一部分空间来存储Java字符串,那就是字符串池
通过字符串池,两个内容相同的字符串变量,可以从池中指向同一个字符串对象,从而节省了关键的内存资源。

String s="abcd";
String s2=s1;

对于这个例子,s和s2都表示"abcd",所以他们会指向字符串池中的同一个字符串对象.

但是,之所以可以这么做,主要是因为字符串的不变性。试想一下,如果字符串是可变的,我们一旦修改了s的内容,那必然导致s2的内容也被动的改变了,这显然不是我们想看到的。

缓存HashCode。由于字符串的不可变性,可以将字符串的哈希码(HashCode)缓存起来,这样在多次使用字符串的哈希码时就不需要重新计算,提高了性能。

2.安全性

String对象在Java中广泛用于存储敏感信息,例如密码、数据库连接等。如果String是可变的,那么它的值可以被修改,这可能导致潜在的安全漏洞。通过将String设计为不可变的,可以确保其值在创建后不能被修改,提高了数据的安全性。

3.线程安全性

不可变会自动使字符串成为线程安全的,因为当从多个线程访问它们时,它们不会被更改。
因此,一般来说,不可变对象可以在同时运行的多个线程之间共享。它们也是线程安全的,因为如果线程更改了值,那么将在字符串池中创建一个新的字符串,而不是修改相同的值。因此,字符串对于多线程来说是安全的。

4.API设计和预测性能

String的不可变性使得它的API设计更加简单和一致。在使用String时,我们可以放心地传递和接收String对象,不必担心它的值会被修改。此外,不可变性还使得String的哈希值和相等性判断可以预先计算,提高了这些操作的性能。

http://www.yayakq.cn/news/520217/

相关文章:

  • 申请网址的网站辽宁网站建站系统哪家好
  • 门户网站开发jz190网站加alt属性对优化有影响吗
  • 响应式网站设计思路网站过度优化的表现
  • wordpress建设QQ登录网站建设与优化推广的话术
  • 高端网站建设南京wordpress 公用模块
  • 国外设计网站及介绍asp网站攻击
  • 网站 盈利模式百度秒收录软件
  • 巨鹿企业做网站中国保险公司排名前十名
  • 吉首做网站网站目标建设
  • 新手做网站最简单流程城市绿化建设英文网站
  • 武进建设局网站为何老是打不开江西南昌网站建设招标
  • 江西电信网站备案海川建设公司网站
  • 长春火车站电话人工服务网站设计风格化
  • 北京app网站建设价格wordpress火车头采集免费版
  • 一个电商网站开发要多久dchaser wordpress
  • 免费建手机商城网站山东做网站
  • 做美图 网站有哪些东西东戴河网站建设
  • 合肥网站制作QQwordpress调用当前分类链接
  • 可以访问任何网站的浏览器如何做明星的个人网站
  • 360网站备案查询北京个人网站制作
  • 西安 微网站如何制作自己的网页
  • 网站开发实习生江苏建筑工程网
  • 西安中交建设集团网站商城建站
  • wordpress可以做大量文章的网站网页制作是干嘛的
  • 衡阳企业网站建设价格网站建设毕业设计指导老师意见
  • 鄂尔多斯网站制作 建设推广一建证挂出去一年多少钱
  • vs网站开发表格大小设置百度官网登录
  • 德国网站后缀凡客诚品的商业模式
  • 软件开发包含网站开发烟台seo快速排名
  • 达州+网站建设百度的营销方式有哪些