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

企业手机端网站模板河南省国基建设集团有限公司网站

企业手机端网站模板,河南省国基建设集团有限公司网站,深圳网站建设公司乐云seo,简单的编程代码1、引言 在上一篇文章中,我们理解了字符串的常用方法,细心的同学大概已经发现,不管是将字符串中的字符转变为大写或小写,或是完成字符串的替换,又或是去除空白字符等等,只要涉及到字符串的修改&#xff0c…

1、引言

在上一篇文章中,我们理解了字符串的常用方法,细心的同学大概已经发现,不管是将字符串中的字符转变为大写或小写,或是完成字符串的替换,又或是去除空白字符等等,只要涉及到字符串的修改,我们都是生成了一个新的字符串,而不是改变原有的字符串。

例如(toLowerCase方法的源码,返回新的字符串对象):

这是因为String类的对象是不可以被修改的(字符串具有不可变性)。关于字符串为什么不可以被修改,答案就在下面的文章中~

2、字符串为什么具有不可变性

2.1 String类在源码中的设计

2.1.1 String类被final所修饰

为什么不可被修改呢?我们先来观察String类的源码:

我们可以看到String类被final所修饰,但是这并不是字符串不可变的原因,因为当类被final修饰时,只能说明这个类不能被继承,也就是说String类不可被继承,而不是不可变。

2.1.2 value被final所修饰

我们继续往下看,

我们又发现,value数组也被final修饰了,我们知道,String类的value数组才真正存储了字符串的内容,到这里,有的同学就开始激动了,就说:"value数组被final修饰了,变成了常量,常量不可变,所以字符串就具有不可变性!!!"。

但事实并不是这样,因为数组是一个引用类型,当引用类型被final修饰,只能说明当前引用变量的指向不能改变,而并不是不能修改它所指向的内容,我们来观察以下代码:

我们发现,当数组被final修饰后,我们可以改变它的内容,但是不能改变它的指向,也就是说final修饰value数组并不是字符串不可变的原因。(很多同学都会在这里产生误解)

2.1.3 value数组被private修饰封装

其实这点才是字符串不可变的真正原因,value数组被封装在了String类当中,没有提供任何的get和set方法,无法获取到字符串,当然也不可能被修改。

2.2 总结

1.当一个类被final修饰,说明这个类不能被继承。也就是说,String类被final修饰不是字符串不可变的原因。

2.当一个引用类型被final所修饰,说明这个引用的指向不能改变,但是可以修改这个引用所指向的内容。也就是说,value被final修饰不是字符串不可变的原因。

3.value被private修饰,被封装起来才是字符串不可变的真正原因。

3、字符串的修改

3.1 使用"+"对字符串拼接

我们已经理解了字符串为什么不可变,也知道了字符串的修改实质上会再创建一个新对象,

因此,我们每使用一次"+"来完成字符串的拼接(以及对字符串进行修改)实质上就是创建了一个新的String类对象:

而每次都要创建新对象,会占用大量的内存空间,效率非常低下,所以我们不推荐这样来完成字符串的拼接,为了提高效率,我们使用StringBuilder和StringBuffer类来完成对字符串的修改。

3.2 StringBuilder和StringBuffer类

StringBuilder和StringBuffer的功能大部分是相同,我们这里就以StringBuilder来讲。

3.2.1 append方法完成拼接

我们可以通过append来完成字符串的拼接(拼接在尾部,相当于String的"+"):

我们可以通过append来拼接多种类型,且返回值都是this(说明在原来的串上进行的修改,不会产生新的对象):

拼接完成后,我们可以调用StringBuilder中重写的toString方法,使用String类型来接收生成的字符串:

这样,可以减少额外对象的生成,大大的提高了效率!

3.2.2 StringBuilder和StringBuffer中的字符串修改方法

我们发现,在这两大类中,提供了能够修改字符串的方法,很方便的供我们使用。

例如reverse方法:

我们可以很轻松的在原来的字符串上完成字符的逆置。

例如insert方法:

我们可以在指定下标处完成插入。

注:这些方法都是在原本的字符串上进行的修改,不会生成新的对象,效率很高。

4、String、StringBuilder、StringBuffer的区别

1.String的内容不可被修改,StringBuilder和StringBuffer的内容可以被修改。

2.StringBuilder和StringBuffer的功能大体相同。

3.StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作。(学习中,后面再说~)

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

相关文章:

  • 网站开发中如何设计验证码wordpress 珠宝主题
  • 专做电子产品评测的网站电子商务网站建设训练总结
  • 建站系统哪个比较好wordpress 侧边栏左边
  • 公众微信网站建设口碑好的定制网站建设提供商
  • 网站要和别人做api 链接温州百度网站快速优化
  • 企业网站开发的背景和意义浙江省特种作业人员证书查询
  • 网站开发类毕业设计去类似美团网站做软件开发
  • 网站建设买了服务器后怎么做农业网站建设模板
  • 二级网站怎样做排名网站建设开发有限公司
  • 2017建站之星怎么样网络营销推广公司哪家好
  • 怎样运营推广网站建设个人网站需要备案吗
  • 网站建设规划案例自己做平台需要多少钱
  • 境外做网站网站网络销售网站设置
  • 南通做网站友情链接多久有效果
  • 中国小说网站策划与建设网站建设方案的企业
  • 大网站成本wordpress读取速度慢
  • 凡科做的网站为什么打不开网站上的美工图片要怎么做
  • wordpress标签别名百度智能小程序怎么优化排名
  • 免费行情软件网站大全网页版设计师做兼职的网站有哪些
  • 网站的设计费用三亚网站优化
  • 学校做网站需要多少钱小说网站制作模板
  • 免费注册企业网站不锈钢公司网站源码 网站建设 产品3级分类asp源码
  • 湛江个人网站制作在哪里做无锡网站设计无锡网站建设
  • 网站建设在淘宝怎么分类鹰潭北京网站建设
  • 安阳做推广网站做网站时怎么让边框细一点
  • 小学生入门编程用什么软件网站怎么做利于优化
  • 自己做自媒体在哪个网站比较好专门做10s视频的网站
  • 太原好的网站制作排名网站安全检测腾讯
  • 住建部官方网站郑州最好的人流医院
  • 2015做外贸网站好做吗深圳建设厅网站