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

php大型网站开发百度地图收录提交入口

php大型网站开发,百度地图收录提交入口,网站标题更新,数据库对于做网站的重要性目录 概述 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.mmbaike.com/news/64395.html

相关文章:

  • 网站建设和维护需要学的东西怎么提交网址让百度收录
  • 如何做个小程序自己卖货泰州seo公司
  • 网站开发培训班新站seo快速排名 排名
  • 泰安市泰山区招聘信息长沙优化网站
  • 专业做二手网站有哪些深圳华强北
  • 上海公司法人落户条件网络优化工程师吃香吗
  • 个人网站备案做论坛郑州seo关键词
  • 没有外网ip怎么做网站天津最新消息今天
  • 做淘客的网站都有哪几个郑州网站推广公司电话
  • 深圳网站设计公司北大青鸟软件开发培训学费多少
  • 用网上的文章做网站行吗营销推广是什么意思
  • 做视频直播的网站站长工具日本
  • 如何做快递api接口网站网络推广都有哪些平台
  • 高端网站设计品牌建什么网站可以长期盈利
  • 微信h5在哪个网站做网站外包
  • 免费网站推广入口关键词优化软件
  • 专门做毕业设计的网站企业培训权威机构
  • wordpress内容主题模板下载河南网站关键词优化代理
  • 网页设计代码不能运行张家界百度seo
  • 江西新余网站建设太原免费网站建站模板
  • 东莞市seo网络推广哪家好做优化的网站
  • 重庆綦江网站制作公司推荐seo怎么收费
  • 做招工的网站排名企业网上的推广
  • 重庆微信企业网站培训总结怎么写
  • 娄底网站建设方案南阳seo优化
  • 电商网站建设 教学总结吸引客流的25个技巧
  • 山东飞鸿建设集团网站网络兼职平台
  • php网站开发个人职责长沙seo排名优化公司
  • 自己的网站怎么推广长沙竞价优化
  • 处方药可以做网站吗深圳百度推广电话