String、StringBuilder和StringBuffer的区别

203 阅读1分钟

String和StringBuilder的区别

 String和StringBuilder最大的区别就在于String是不可变的,具有不可变性,对String的各种操作都不会对本身产生影响,除非采取赋值的形式把变化的值重新赋给String,这就导致了,String的操作会产生很多中间值消耗内存,而StringBuffer的操作是直接在原来对象上进行操作的,比如:

	//对String进行字符串拼接
	//新建一个String对象压入栈中并指向常量池中的"hello"
	String str = new String("hello");
	System.out.println(str);//hello
	//要想对String进行拼接,我们只能通过重新赋值的方式
	//此时在堆中重新new String("hello,word");并将str指向新创建的位置
	str = str+",world";
    System.out.println(str);//hello,word
	
	
	//对StringBuilder进行字符串拼接
	//新建一个StringBuilder对象
	StringBuilder strb = new StringBuilder("hello");
	System.out.println(strb);//hello
	//要想对StringBuilder进行拼接,我们只需要调用StringBuilder的append方法
	//此时堆中原来new StringBuilder("hello");语句变为new StringBuilder("hello,word");
	strb.append(",word");
	System.out.println(strb);//hello,word

StringBuilder和StringBuffer的区别

 由于StringBuilder和StringBuffer基本一样,所以String和StringBuilder的区别也同样是String和StringBuffer的区别,不再赘述。

 StringBuilder和StringBuffer的区别就在于,StringBuffer具有线程安全,而StringBuilder不具备,因此,StringBuilder的执行效率要高于StringBuffer,而日常开发时对字符串的操作很少需要考虑线程安全问题,因此,开发常用StringBuilder。

执行效率:

 StringBuilder>StringBuffer>String