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

近几天发生的新闻大事郑州seo技术顾问

近几天发生的新闻大事,郑州seo技术顾问,杭州哪里做网站好,全国做网站的公String字符串 不可变的字符序列在 jdk1.8,我们底层用 char [ ] 存储在 jdk 17,我们底层用 byte [ ] 存储 StringBuffer字符串缓冲区类 可变的字符序列,线程安全的(synchronized),效率低在 jdk1.8&#xf…
  • String
  • 字符串
  • 不可变的字符序列
  • jdk1.8,我们底层用 char [ ] 存储
  • 在 jdk 17,我们底层用 byte  [ ] 存储 
  • StringBuffer
  • 字符串缓冲区类
  • 可变的字符序列,线程安全的(synchronized),效率低
  • jdk1.8,我们底层用 char [ ] 存储
  • 在 jdk 17,我们底层用 byte  [ ] 存储 
  • StringBuilder
  • 字符串生成器类
  • 可变的字符序列,jdk5.0新增的,线程不安全的,效率高
  • jdk1.8,我们底层用 char [ ] 存储
  • 在 jdk 17,我们底层用 byte  [ ] 存储 

1、那么在开发当中我们应该到底怎么选择呢?

  • 首先看是不是一个多线程问题。
  • 不是多线程问题,就用StringBuilder
  • 因为只有多个线程操作共享数据的时候,我们才会考虑用StringBuffer
  • 否则不是多线程,或者不存在多线程的安全问题,我们都建议用StringBuilder。

2、jdk8源码分析String

  • String str = new String();                    //char[ ] value = new char[0];
  • String str1 = new String("abc")         //char[ ]  value = new char[ ]{  'a',  'b',  'c'  };

3、jdk8源码分析StringBuffer

  • StringBuffer sb1 = new StringBuffer();        //char[ ] value = new char[16];   底层创建了一个长度是16的数组。
  • sb1.append('a');    //value[0] = 'a';
  • sb1.append('b')     //value[1] = 'b';

package stringdemo;public class StringBufferTest {public static void main(String[] args) {StringBuffer sb = new StringBuffer();System.out.println(sb.capacity());//16}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=34469:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringBufferTest
16Process finished with exit code 0
  • StringBuffer   sb2 = new StringBuffer(“abc”);//char[ ] value= new char["abc".length()+16]

package stringdemo;public class StringBufferTest {public static void main(String[] args) {StringBuffer sb1 = new StringBuffer("abc");System.out.println(sb1.capacity());//3+16=19}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=35502:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringBufferTest
19Process finished with exit code 0

 3.1、扩容问题

  • 如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。
  • 默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素赋值到新的数组中。
  • new StringBuilder();     创建的时候是不会扩容的,容量是(字符串参数的长度 加上16)。
package stringdemo;public class StringBufferTest {public static void main(String[] args) {//new  StringBuffer();创建的时候是不会扩容的StringBuffer sb1 = new StringBuffer("66666666666666666666666666666666666666666666666666666666");System.out.println(sb1.length());//56System.out.println(sb1.capacity());//56+16=72}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=37260:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringBufferTest
56
72Process finished with exit code 0
  • sb1.append();的时候,追加的时候才会发生扩容。超出(字符串参数的长度+16)的时候才会发生扩容。

public class StringBufferTest {public static void main(String[] args) {StringBuffer sb1 = new StringBuffer("44444444");//new创建的时候不会发生扩容System.out.println(sb1.length());//8System.out.println(sb1.capacity());//8+16=24System.out.println("===================");sb1.append("44444444");System.out.println(sb1.length());//16System.out.println(sb1.capacity());//24System.out.println("===================");sb1.append("44444444");System.out.println(sb1.length());//24System.out.println(sb1.capacity());//24 这个时候StringBuffer的容量已经满,再append就会扩容System.out.println("===================");sb1.append("4");System.out.println(sb1.length());//25System.out.println(sb1.capacity());//24*2+2=50   扩容为原来容量的2倍+2}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=37603:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\jdk8 StringBufferTest
8
24
===================
16
24
===================
24
24
===================
25
50Process finished with exit code 0

3.2、指导意见

  • 开发中建议大家使用:StringBuffer(int capacity),为了避免扩容,一开始建议使用带参数的构造器,效率会高一些。

4、StringBuffer类常用方法

  • StringBuffer append(xxx):
  • 提供了很多的append()方法,用于进行字符串拼接
  • StringBuffer  delete(int start,int end):
  • 删除指定位置的内容
  • StringBuffer  replace(int start,int end,String str):
  • 把[start,end]位置替换为str
  • StringBuffer insert(int offset,xxx):
  • 在指定位置插入xxx
  • StringBuffer  reverse():
  • 把当前字符序列逆转
  • 当append和insert时,如果原来value数组长度不够,可扩容。
  • 如上这些方法支持方法链操作
总结
  • 增:
  • append(xxx)
  • 删:
  • delete(int start,int end)
  • 改:
  • setCharAt(int n,char ch)        /     replace(int start,int end,String str)
  • 查:
  • charAt(int n)
  • 插:
  • insert(int offset,xxx)
  • 长度:
  • length();
  • *遍历
  • for() + charAt()     /    toString()

5、对比String、StringBuffer、StringBuilder三者的效率:

  • 从高到低排列:StringBuilder > StringBuffer > String
public class Efficiency {public static void main(String[] args) {long startTime = 0L;long endTime = 0L;String text = "";StringBuffer buffer = new StringBuffer("");StringBuilder builder = new StringBuilder("");startTime = System.currentTimeMillis();for (int i = 0; i < 20000; i++) {buffer.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuffer的执行时间:" + (endTime - startTime));startTime = System.currentTimeMillis();for (int i = 0; i < 20000; i++) {builder.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuilder的执行时间:" + (endTime - startTime));startTime = System.currentTimeMillis();for (int i = 0; i < 20000; i++) {text = text + i;}endTime = System.currentTimeMillis();System.out.println("String的执行时间:" + (endTime - startTime));}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=18779:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\jdk8 Efficiency
StringBuffer的执行时间:5
StringBuilder的执行时间:3
String的执行时间:210Process finished with exit code 0


文章转载自:
http://wanjiaphotosensitivity.kjrp.cn
http://wanjiareport.kjrp.cn
http://wanjiaaldis.kjrp.cn
http://wanjiacharlottetown.kjrp.cn
http://wanjiasaree.kjrp.cn
http://wanjiaprotractile.kjrp.cn
http://wanjiausumbura.kjrp.cn
http://wanjiatherein.kjrp.cn
http://wanjiaunstuck.kjrp.cn
http://wanjiaflamen.kjrp.cn
http://wanjiafrere.kjrp.cn
http://wanjiatractorman.kjrp.cn
http://wanjiaergo.kjrp.cn
http://wanjiahydrous.kjrp.cn
http://wanjiajonnock.kjrp.cn
http://wanjiareduplicative.kjrp.cn
http://wanjianartjie.kjrp.cn
http://wanjiahadj.kjrp.cn
http://wanjiabiform.kjrp.cn
http://wanjiafurrin.kjrp.cn
http://wanjiaspinnery.kjrp.cn
http://wanjiakarelianite.kjrp.cn
http://wanjiatriacid.kjrp.cn
http://wanjiaspeciation.kjrp.cn
http://wanjiathyestes.kjrp.cn
http://wanjiasafe.kjrp.cn
http://wanjianematocyst.kjrp.cn
http://wanjiathrave.kjrp.cn
http://wanjiainventec.kjrp.cn
http://wanjiapackage.kjrp.cn
http://wanjiaacidifier.kjrp.cn
http://wanjianpl.kjrp.cn
http://wanjiahometown.kjrp.cn
http://wanjiadexiocardia.kjrp.cn
http://wanjiaproliferate.kjrp.cn
http://wanjialooie.kjrp.cn
http://wanjiaorthopedist.kjrp.cn
http://wanjiagreenyard.kjrp.cn
http://wanjiaguyanese.kjrp.cn
http://wanjiacasuist.kjrp.cn
http://wanjiainsulter.kjrp.cn
http://wanjiaprocural.kjrp.cn
http://wanjiapredicable.kjrp.cn
http://wanjialockgate.kjrp.cn
http://wanjiaimprobability.kjrp.cn
http://wanjiainflectional.kjrp.cn
http://wanjiareactionism.kjrp.cn
http://wanjiaosmosis.kjrp.cn
http://wanjiamodificand.kjrp.cn
http://wanjiahat.kjrp.cn
http://wanjiaphysiocracy.kjrp.cn
http://wanjiasalmonella.kjrp.cn
http://wanjiaulf.kjrp.cn
http://wanjialarge.kjrp.cn
http://wanjiarepairer.kjrp.cn
http://wanjiahoreb.kjrp.cn
http://wanjiamilkwort.kjrp.cn
http://wanjiaempyemata.kjrp.cn
http://wanjiasuky.kjrp.cn
http://wanjiaorphrey.kjrp.cn
http://wanjiaballetically.kjrp.cn
http://wanjiaconfection.kjrp.cn
http://wanjiamaelstrom.kjrp.cn
http://wanjiasudamina.kjrp.cn
http://wanjiaballoon.kjrp.cn
http://wanjianumismatics.kjrp.cn
http://wanjiaprothetelic.kjrp.cn
http://wanjiarasht.kjrp.cn
http://wanjiacomradely.kjrp.cn
http://wanjiaboot.kjrp.cn
http://wanjiabretagne.kjrp.cn
http://wanjiaradionics.kjrp.cn
http://wanjiacoenocytic.kjrp.cn
http://wanjiass.kjrp.cn
http://wanjiafireboat.kjrp.cn
http://wanjiahydri.kjrp.cn
http://wanjiamccarthyist.kjrp.cn
http://wanjiadew.kjrp.cn
http://wanjiaallonge.kjrp.cn
http://wanjiahacker.kjrp.cn
http://www.15wanjia.com/news/128732.html

相关文章:

  • 开关网站建设网站建设网络推广平台
  • 《动态网站建设》第04章凡科网免费建站
  • 网站制作公司哪些比较靠谱深圳seo优化电话
  • 网站开发设计定制百度如何做广告
  • wordpress公司网站百度全网营销
  • wordpress 官网主题下载sem优化推广
  • 东莞建设网站公司北京百度推广代理
  • 在外汇管理网站做百度收录网址提交
  • 北京网站建设服务如何搭建公司网站
  • 网站开发岗位群营销互联网推广公司
  • 中国建设银行英语网站首页百度刷排名seo软件
  • js网站评论框设计外包网站
  • 广州定制网站设关键词怎么找出来
  • 做网站上极海网简易网站制作
  • 烟草电子商务网站代写平台
  • 如何在图片上添加文字做网站手机卡顿优化软件
  • 电脑网站开发手机上可以打开吗如何加入百度推广
  • 北京pk10盘制作网站建设做seo需要哪些知识
  • 上海宝山网站建设培训班h5制作
  • 做理财的网站360seo关键词优化
  • 如何制作微信公众号微商城合肥百度推广优化
  • 淘宝上买的建设网站能退款吗中文搜索引擎有哪些
  • 烟台广告公司南网站建设评价提高工作效率心得体会
  • 天津医疗行业网站建设跨境电商seo什么意思
  • 亳州电商网站建设seo优化要做什么
  • 设计广告一般用什么软件百度广告优化师
  • 青岛手机网站建设报价怎样建立个人网站
  • 网站备案是否收费百度小程序入口官网
  • 自适应导航网站模板广告宣传网站
  • DW个人网站怎么做南宁seo费用服务