栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

字符串之StringBuilder、StringBuffer

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

字符串之StringBuilder、StringBuffer

目录

一、StringBuilder和StringBuffer

1.数组的初始状态

2.如何扩容?

二、intern()方法:


一、StringBuilder和StringBuffer

StringBuffer保存的char数组是可变的。

1.数组的初始状态

        value数组,默认长度16,可以根据参数进行初始化。

2.如何扩容?

        扩容原数组长度的2倍+2.

        相同:

                StringBuffer和StringBuilder都没有重写equals方法。

                它们的方法和操作基本相同。

StringBuilder sb1 = new StringBuilder();

//1.追加
		sb1.append("java");
		System.out.println(sb1);//java
		
//2.插入
		sb1.insert(0, "hello ");
		System.out.println(sb1);//hello java
		
//3.替换
		sb1.replace(0, 5, "你好");
		System.out.println(sb1);//你好 java
		
//4.删除
		System.out.println(sb1.delete(2, 3));//你好java
		
//5.反转
		System.out.println(sb1.reverse());//avaj好你

        不同:

                1.线程安全与否:

                StringBuffer 线程安全的,方法加synchronized修饰。多个线程并发读写不会引起冲突。

                StringBuilder(JDK 1.5)线程不安全的,方法没有synchronized修饰。多个线程并发读写会引起冲突。因为效率和性能问题StringBuilder取消了线程同步机制,它有其他的线程安全解决方法。

                2.效率高低:

                StringBuilder > StringBuffer >String

                

                3.capacity():字符容量方面

 

 

StringBuilder长度、字符容量

//length():返回字符序列的长度
//capacity():字符容量。
		//当起始分配的字符容量16,没有存满时,此时的capacity()输出容量为16;
		//当起始容量满,又扩展之后,此时的capacity()输出容量为  起始容量+字符序列的长度(16+length())。
		System.out.println(sb1.length());//6
		System.out.println(sb1.capacity());//16
		
		StringBuilder sb2 = new StringBuilder("0123456789abcdefg");
		System.out.println(sb2.length());//17
		System.out.println(sb2.capacity());//33

StringBuffer长度、字符容量

//length():返回字符序列的长度
//capacity():字符容量。
		//StringBuffer在为对象分配长度的时候,起始会分配一个字,也就是两个字节长度即(16位),
		//每增加一个字符,长度就会在16的基础上加 1。即capacity()输出容量为  起始容量+字符序列的长度(16+length())
		StringBuffer sb1 = new StringBuffer("hello");
		System.out.println(sb1.length());//5
		System.out.println(sb1.capacity());//21

二、intern()方法:
		//intern():去常量池中找对应的值,有则调用,无则创建
		//其实就是String对象的常量缓存
		System.out.println(s1==s2.intern());//true
		
//		String s3 = "java";
		String s4 = new String("java");
		System.out.println(s4==s4.intern());//false

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号