Java_StringBuilder类

【1】String类和StringBuilder类的区别 

String类:

1、字符串都是常量,他们的值在创建之后是不可更改的

2、字符串的底层是一个被final修饰的数组,不能改变,是一个常量。即底层private final byte[] value;

3、进行字符串的相加,内存就会有多个字符串,占用空间多,效率低下。

StringBuilder类:

1、也称字符串缓冲区,可以提高字符串操作效率,即一个长度可以变化的字符串

2、底层也是一个数组,但是没有被final修饰,可以改变长度。byte[] value=new byte[16];

3、StringBuilder在内存中使用只有一个数组,占用空间少,效率高,若超出缓冲区默认容量,会自动扩容

总之:字符串是常量,他们的值在创建之后是不可更改的,正因如此,在字符串相加时需要不断创建字符串对象,效率低。而字符串缓冲区可以支持可变的字符串,因此字符串拼接时始终是一个数组中完成,效率高。

【2】字符串拼接问题

public static void main(String[] args) {
		String str="abc";
	    str+="def";
		System.out.println(str);
	}

分析:以上代码总共产生了三个字符串,分别是:"abc"、"def"、"abcdef", 引用变量str首先指向abc对象,最终指向拼接出来的新字符串对象即abcdef。

【3】StringBuilder类的构造函数和API

1、构造函数:

StringBuilder()构造一个不带任何字符的字符串生成器(底层是可变数组),其初始容量为16个字符。

StringBuilder(String str):构造一个字符串生成器,初始化为指定的字符串内容

2、StringBuilder类常用方法:

public static void main(String[] args) {
		StringBuilder sb=new StringBuilder("hellojavaworld");
		//增
		sb.append("这是梦想");
		System.out.println(sb);
		//删
		sb.delete(3, 6);//删除位置在[3,6)上的字符
		System.out.println(sb);
		
		sb.deleteCharAt(10);//删除位置在10上的字符
		System.out.println(sb);
		//改-插入
		StringBuilder sb1=new StringBuilder("$2334654776");
		sb1.insert(3,"/");//在下标为3的位置上插入
		System.out.println(sb1);
		//改-替换
		StringBuilder sb2=new StringBuilder("$2你好吗3455345");
		sb2.replace(3, 5,"我很好");//在下标[3,5)位置上插入字符串
		System.out.println(sb2);
		//查
		StringBuilder sb3=new StringBuilder("adsfs");
		for(int i=0;i<sb3.length();i++) {
			System.out.println(sb3.charAt(i)+"\t");
		}
		System.out.println();
		//截取
		String str=sb3.substring(2,4);//截取[2,4)返回的是一个新的String,对StringBuilder没有影响
		System.out.println(str);
		System.out.println(sb3);
	}

【4】面试题:String、StringBuilder和StringBuffer的区别?

1、String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可变的,直至这个对象销毁。

2、StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert、setChartAt等方法改变其内容,一旦生成了最终的字符串,调用toString方法将其转变为String。

3、JDK1.5新增了StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高,通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder。

StringBuilder  JDK1.5开始  效率高   线程不安全

StringBuffer    JDK1.0开始  效率低   线程安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值