String 和StringBuffer的区别

本文详细介绍了Java中String、StringBuffer及StringBuilder的区别与应用场景,并通过示例代码展示了如何使用这些类来高效地操作字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA 平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改 变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可 以使用StringBuffers来动态构造字符数据。

String str = "hello";

str = str + "world";

hello  和   hello world 是两个对象   hello字符串也许以后永远都不会再被用到,但这个字符串并不会被垃圾回收,因为它将一直存在于字符串池中—这也是JAVA内存泄露的原因之一。

对于 String 类而言,它代表字符串序列不可改变的字符串,因此如果程序需要一个字符序列会发生改变的字符串,那应该考虑使用StringBuilder或StringBuffer.很多资料上都推荐使用StringBuffer,那是因为这些资料都是JDK1.5问世之前的—过时了。

 实际上通常应该优先使用的是StringBuilder。StringBuffer是线程安全的,也就是说StringBuffer类里绝大部分方法都增加了synchronized修饰符。对方法增加synchronized修饰符可以保证该方法线程安全,但会降低该方法的执行效率。在没有多线程的环境下,应该优先使用StringBuilder类来表示字符串。

验证代码如下

/* 
 * Copyright (c) 2013, 360buy Group and/or its affiliates. All rights reserved.
 */
package com.yh.java.mianshi;

/**
 * 
 * @version 2013-11-19
 * @author dbyanghao
 */
public class StringStringbufferTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//string 开始
		//定义一个字符串变量
		String  str = "Hello ";
		//identityHashCode方法用户获取某个对象唯一的hashCode值,只有当两个对象相同时,它们的identityHashCode才会相等
		System.out.println("String:"+str+"---"+System.identityHashCode(str));
		str = str + "World";
		System.out.println("String:"+str+"---"+System.identityHashCode(str));
		str = str + ", China";
		System.out.println("String:"+str+"---"+System.identityHashCode(str));
		
		//StringBuffer
		StringBuffer stb = new StringBuffer("Hello ");
		System.out.println("StringBuffer:"+stb+"---"+System.identityHashCode(str));
		//追加更改字符串
		stb.append("World");
		System.out.println("StringBuffer:"+stb+"---"+System.identityHashCode(str));
		stb.append(", China");
		System.out.println("StringBuffer:"+stb+"---"+System.identityHashCode(str));
		
		//StringBuilder
		StringBuilder sbr = new StringBuilder("Hello ");
		System.out.println("StringBuilder:"+sbr+"---"+System.identityHashCode(str));
		//追加更改字符串
		sbr.append("World");
		System.out.println("StringBuilder:"+sbr+"---"+System.identityHashCode(str));
		sbr.append(", China");
		System.out.println("StringBuilder:"+sbr+"---"+System.identityHashCode(str));

	}

}



执行结果如下:

String:Hello ---33263331
String:Hello World---6413875
String:Hello World, China---21174459
StringBuffer:Hello ---21174459
StringBuffer:Hello World---21174459
StringBuffer:Hello World, China---21174459
StringBuilder:Hello ---21174459
StringBuilder:Hello World---21174459
StringBuilder:Hello World, China---21174459



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值