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

怎么开设网站 优帮云秦皇岛短视频优化

怎么开设网站 优帮云,秦皇岛短视频优化,网站建设东莞公司,百度推广怎么做免费目录 一、String、StringBuffer、StringBuilder的区别 二、String为什么是不可变的 三、字符串拼接用""还是用StringBuilder 四、String 中的equals和Object中的equals的区别 五、字符串常量池的作用了解吗? 六、String s1 new String("abc&qu…

目录

一、String、StringBuffer、StringBuilder的区别

二、String为什么是不可变的

三、字符串拼接用"+"还是用StringBuilder

四、String 中的equals和Object中的equals的区别

五、字符串常量池的作用了解吗?

六、String s1 = new String("abc")是创建了几个对象?

七、String中的intern方法有什么作用

八、String类型的变量和常量做"+"时发生了什么?


一、String、StringBuffer、StringBuilder的区别

1. 是否可变

String由于属性被private 而且还被final修饰 而且String类还是final的  所以子类也无法进行修改 外界无法进行干扰,可以理解为常量  自然就不可变了

而StringBuffer和StringBuilder都实现了StringBuilderAbstract类 这个抽象类中定义了许多方法  例如:append   replace 等方法 是可变的

2. 线程是否安全

String中的属性可以理解为常量,自然是线程安全的

StringBuffer中的方法获取调用的方法都加了同步锁,因此是线程安全的

StringBulider中都没有加同步锁,自然线程不安全

3. 性能

String每次对其修改都需要重新创建一个新的对象,因此对内存的消耗也比较大,性能不是很高

StringBuffer和StringBuilder因为都是可变的,效率较高,而StringBuilder因为方法都没有加锁,因此性能更高

总结三者的使用:

1. 如果是少量的操作,可以使用String

2. 如果是处于单线程环境,并且有大量的字符串操作,可以使用StringBuilder

3. 如果是多线程环境,大量的字符串操作,使用StringBuffer

二、String为什么是不可变的

因为字符数组(后面是字节数组)被private修饰 也被final修饰 并且没有对外提供修改方法,因此无法直接操作

并且String类还是被final修饰的,所以也不能被子类所修改

三、字符串拼接用"+"还是用StringBuilder

使用+其实底层就是使用的StringBuilder的append方法

对于大量的拼接操作,推荐使用StringBuilder(当然这个在jdk9中得到了优化,也可以使用+),因为这只是一个StringBuilder对象在使用,而如果在循环中连续的对一个字符串使用+操作的话,就会创建多个StiringBuilder对象,不能进行复用,因此效率较低。

四、String 中的equals和Object中的equals的区别

String中的equals方法是得到了重写的,是比较的字符串的内容,而非Object中直接比较地址

五、字符串常量池的作用了解吗?

字符串常量池相当于就是缓存,是为了减少资源消耗的,避免重复的创建字符串对象

字符串常量池是存在于方法区中,一旦有一个String s = "abc"或者是Stirng s = new Sting("abc")

那么就会在字符串常量池中保留abc这个字面量   当下次再去 String s2 = "abc"时,此时无需再创建对象,直接使用字符串常量池中的即可,对于Stirng s4 = new Sting("abc")也一样,此时就只需要创建堆中的字符串对象,里面的char[]数组其实还是直接使用的字符串常量池中的字符串引用、

所以此时就只需要创建一个对象即可

六、String s1 = new String("abc")是创建了几个对象?

当字符串常量池中已存在abc字符串那么就只创建一个对象  否则需要不仅要创建堆上的字符串对象  还要创建字符串常量池中的(其实是创建那个char[]的,只是后面把这个引用放到字符串常量池中)

例如:

String s = "abc";/String s = new Stirng("abc")这个也会放到字符串常量池中

String s1 = new String("abc")

此时创建一个对象

七、String中的intern方法有什么作用

就是手动的将字符串引用放到字符串常量池中

如果字符串常量池中已经存在了引用,那么就直接返回这个引用 否则创建一个引用再返回

当然当创建String对象的时候,实际上就已经自动的将其引用放到字符串常量池中去了

八、String类型的变量和常量做"+"时发生了什么?

如果是常量 + 常量的方式  再编译的时候,编译器就会进行 一种叫做“常量折叠”的优化

例如 "abc" + "fg" 编译器就会直接将其优化成"abcfg" 不仅字符串这样 像其他的int long byte char等也会存在此优化  

对于常量可以这样优化,但是一旦有变量,也就是对象引用 那么在编译的时候是无法对其进行优化的  因此只能创建一个新的创建 在堆上

String s1 = "abc" String s2 = "df"

s1 + s1 其实是 new StringBuilder().append(s1).append(s2).toString()

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

相关文章:

  • 制作百度移动网站模板徐州市做网站
  • 郑州营销型网站制作运营给我一个网站贴吧
  • 网站备案个人和企业的区别如何免费建立个人网站
  • 多导航织梦网站模板下载地址软件的定制开发比较好的公司
  • 网站首屏做多大网站添加在线qq聊天
  • 招聘网站开发文档辽宁省城乡建设集团官网
  • 天津网络推广网站建设公司国际国内时事新闻
  • 如何建个人网站教程成都十大广告公司
  • 做网站运营的职业生涯规划房产网签
  • 江苏建设外贸公司网站网站建设需要几十万
  • 备案价格网站顶易云外贸软件
  • 中山市文联灯饰有限公司网站谁做的精准营销策略
  • photoshop设计一个精美的网站主页南海网站制作公司
  • 网站开发设计项目书网站怎么放到服务器上
  • 电子商务网站网络推广方式网站换空间不换域名对seo有影响吗
  • 班级网站源代码下载包头做网站企业
  • 太原做响应式网站设计百度软文推广怎么做
  • 手机网站导航按钮微信crm系统
  • 某网站seo诊断分析如何在后台做网站流程
  • 仿百度百科网站源码wordpress 添加顶部公告
  • 金融服务网站建设内容安居客西安网页版
  • 深圳网站建设首选上榜网络网络规划设计师资料及视频教程
  • 阿里巴巴网站建设的不足之处成都网站制作实力乐云seo
  • 中国域名网站排名西安哪家装修公司最放心
  • wordpress用户名和密码网站优化都是怎么做的
  • 做网站的费用 优帮云抖音小程序定制
  • python建设购物网站巴彦淖尔网站制作开发
  • 一级域名指向wordpress页面太原seo代理计费
  • 东莞网站建设在线推广wordpress访问地址修改
  • 正规建网站企业网站双倍浮动