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

浙江建设报名网站/一键制作网站

浙江建设报名网站,一键制作网站,天津建设网查询分数,免费解析网站制作String类 由多个字符组成的一串数据,值一旦创建不可改变 private final char value[]; 一旦值改变,就会创建新的对象 String s "abc"; //char[] c {a,b,c}s"def"; // 并不是String的值改变,而是创建了一个新的对象s"gh";s"aaa"…

String类

由多个字符组成的一串数据,值一旦创建不可改变

private final char value[];

一旦值改变,就会创建新的对象

String s = "abc";  //char[] c = {'a','b','c'}s+="def"; // 并不是String的值改变,而是创建了一个新的对象s+="gh";s+="aaa";
​System.out.println(s);//abcdefghaaa

String创建对象方法

  1. 简化的创建方式

    先去字符串常量池查找有没有"abc",如果没有,就在字符串常量池中创建一个对象(abc),如果字符串常量池中已有abc,那么就直接指向已有的对象即可

 String s = "abc";String s1 = "abc";System.out.println(s==s1);//trueSystem.out.println(s.equals(s1));//true
  1. new+构造方法

    凡是new出来的,在内存空间中一定是独一无二的

String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true

String、StringBuffer、StringBuilder三者的异同

String:不可变的字符序列,底层使用char[]存储,char被final修饰

StringBuffer:可变的字符序列,线程安全的,效率低,底层使用char[]存储

StringBuilder:可变的字符序列,线程不安全的,效率高,底层使用char[]存储

源码分析

String str = new String();//char[] value = new char[0]
String str1 = new String("abc");// char[] value = new char[]{'a','b','c'}
​
StringBuffer sb1 = new StringBuffer();//char[] value = new char[16] 底层创建了一个长度为16的数组
​
sb1.append('a');//value[0] = 'a';
​
StringBuffer sb1 = new StringBuffer("abc")// char[] value = new char["abc".length()+16]

System.out.println(sb1.length());//0 这里是0的原因是:length方法返回的值并不是value.length 而是源码中的count

@Override 
public synchronized int length() { return count; }

扩容问题:如果要添加的数据底层数组装不下,那么就需要扩容底层数组

@Overridepublic synchronized StringBuffer append(Object obj) {toStringCache = null;super.append(String.valueOf(obj));// 点进父类中的append方法return this;}public AbstractStringBuilder append(String str) {if (str == null)return appendNull();int len = str.length();ensureCapacityInternal(count + len);// 不会立刻添加,先判断容量是否充足str.getChars(0, len, value, count);count += len;return this;}private void ensureCapacityInternal(int minimumCapacity) {// overflow-conscious codeif (minimumCapacity - value.length > 0) {value = Arrays.copyOf(value,newCapacity(minimumCapacity));// 这里我们看到 如果我们所需容量大于数组原有的容量 就会进行数组扩容,创建一个新的容量 并将原有的数组中的元素全部复制进去}
}
​
private int newCapacity(int minCapacity) {// overflow-conscious codeint newCapacity = (value.length << 1) + 2;// 这里扩容的机制是在原数组容量的基础上扩容2倍+2if (newCapacity - minCapacity < 0) {newCapacity = minCapacity;}return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)? hugeCapacity(minCapacity): newCapacity;}

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

从高到低排列:StringBuilder > StringBuffer > String

但是StringBuilder就一定比StringBuffer快吗?

首先我们知道StringBuilder是线程不安全的,所以我们在单线程可以使用StringBuilder更好些

StringBuffer是线程安全的,因为他的方法被synchronized修饰,所以在多线程的情况下使用StringBuffer更好些

正因如此 在我们多线程的情况下 StringBuffer的效率会比StringBuilder更快些

http://www.jmfq.cn/news/5197105.html

相关文章:

  • 专业手机网站建设哪家好/推推蛙seo顾问
  • 南京做企业网站公司哪家好/免费网页制作成品
  • 重庆万州网站建设费用/自助建站系统破解版
  • 怎样做简易局域网站点/百度指数手机版
  • 做网站客服的工作流程/bt磁力链好用的引擎
  • 做外贸建网站多少钱/上海空气中检测出病毒
  • 公司官网网站建设想法/网站生成
  • 网易企业邮箱价格/山东网站seo
  • 设计服务网络建设方案/优化网站排名
  • 西安企业网站建设/网站统计分析工具的主要功能
  • 怎么做原创电影视频网站/百度seo排名优化是什么
  • 北京网站开发公司电话/推广产品引流的最佳方法
  • 提供网站建设商家/推广优化厂商联系方式
  • 厦门市网站建设公司/seo优化推广流程
  • 岗顶做网站公司/南京百度关键字优化价格
  • 莱芜市网站建设设计/google chrome浏览器
  • 做婚礼网站的公司简介/销售网络平台
  • html表格菜鸟教程/seo管理软件
  • 宜昌网站seo收费/html友情链接代码
  • 长沙做个网站多少钱/网络广告策划书案例
  • 学网站制作多少钱/学计算机哪个培训机构好
  • 网站开发技术发展史/企业文化墙
  • 网站建设与维护心得体会/seo做的比较牛的公司
  • 给自己企业怎么做网站/产品宣传推广方式有哪些
  • 专业做包装设计网站/青岛推广优化
  • 朝阳网站设计/企业培训机构哪家最好
  • 做品牌网站哪个好用/房地产营销策略有哪些
  • 网站设计公司-信科网络/seo搜索引擎优化题库
  • 信用中国 网站 支持建设/学生网页制作成品
  • 51aspx源码/青岛谷歌优化公司