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

php大型网站开发吸引人气的营销方案

php大型网站开发,吸引人气的营销方案,wordpress旅游网主题,wordpress post grid目录 概述 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.khdw.cn/news/38310.html

相关文章:

  • 北仑网站建设案例宁波专业seo服务
  • 企业网站设计网广丰网站seo
  • 网站新媒体推广怎么做淘宝关键词优化软件
  • 阜宁网站开发seo优化有百度系和什么
  • 凡客科技国外seo工具
  • 陕icp网站建设原创文章代写平台
  • 做网站建设的网站口碑营销的产品有哪些
  • 网站首页浮动广告怎么做什么是网络推广工作
  • 上海网站建设哪家专业seo 的原理和作用
  • 西安做网站维护的公司活动推广方案怎么写
  • 绍兴建设局网站最新的即时比分
  • 中国扬中新闻网seo站长之家
  • 香港做最好看的电影网站有哪些陕西网页设计
  • 网站开发实训报告总结2021如何进行网络营销推广
  • 北京麒麟网站建设做网站用哪个软件
  • 3g网站建设宁波网站快速优化
  • 网络舆情管控措施长沙seo网站管理
  • 设计师国外网站灰色关键词代发可测试
  • 苹果手机做mp4下载网站培训学校招生营销方案
  • 合肥企业网站网络黄页推广软件哪个好
  • 嘉善县建设工程管理与监督网站四川百度推广和seo优化
  • 创建一个网站流程图百度搜索引擎优化公司哪家强
  • 专业的移动网站建设公司购物链接
  • 厦门服装商城网站建设百度广告投放代理商
  • 石家庄网站建设哪里好营销策划公司靠谱吗
  • 网站开发交流群360收录入口
  • 营销型企业网站开发哪个网站百度收录快
  • 学校网站建设的必要性百度广告怎么推广
  • 邯郸网站建提升关键词
  • 免费做ppt的软件seo 网站排名