字符串之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 私有地维护。
		 * 		当调用 intern 方法时,如果池已经包含一个等于此 String 
		 * 	对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。
		 * 	否则,将此 String 对象添加到池中,并返回此 String 对象的引用。 
		 * 	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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值