String, StringBuffer, StringBuilder比较

本文深入解析Java中的String、StringBuffer和StringBuilder,探讨它们的特点、区别及应用场景,特别关注线程安全性和性能表现。

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

一、概览

  1. String是不可变的字符序列;
  2. StringBuffer是线程安全的,可变的字符序列;
  3. StringBuilder是可变的字符序列。

二、StringBuffer

  Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

三、StringBuilder

  java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

四、面试相关

1. String,StringBuffer,StringBuilder的区别?

  • A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。
  • B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高

2. StringBuffer和数组的区别?

  • 二者都可以看出是一个容器,装其他的数据。
  • 但是呢,StringBuffer的数据最终是一个字符串数据。
  • 而数组( 可以定义类型)可以放置多种数据,但必须是同一种数据类型的。

3. String和StringBuffer分别作为参数传递

  • 基本数据类型的值传递,不改变其值
  • 引用数据类型的值传递,改变其值
  • String类虽然是引用数据类型,但是他当作参数传递时和基本数据类型是一样的
package com.heima.stringbuffer;
public class Demo07_StringBuffer {
	public static void main(String[] args) {
		String s = "heima";
		System.out.println(s);
		//String这个类一旦被初始化就不会被改变
		//change方法调用完之后就弹栈了,hemaiitcast就消失了
		//所以打印的s还是heima
		change(s);
		System.out.println(s);
		
		System.out.println("---------------------");
		StringBuffer sb = new StringBuffer();
		sb.append("heima");
		System.out.println(sb);
		change(sb);
		System.out.println(sb);
	}

	public static void change(StringBuffer sb) {
		sb.append("itcast");
	}

	public static void change(String s) {
		s += "itcast";
	}
}

输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值