String和StringBuffer和StringBuilder的理解

1.String

1.String类结构

在这里插入图片描述

String结构图
在这里插入图片描述

2.String类是被final修饰的是不可被继承的

3.String类本质是被final修饰的字符数组所以内容是不可变的

String类型的对象是不可变的对象, 因此每次对 String 类型对象改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样效率低下,而且浪费大量的内存空间,所以经常改变内容的字符串最好不要用 String 。而是使用StringBuffer和StringBuilder。
在这里插入图片描述

我们可以看到,初始String值为“hello”。
然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的。
最终得到了“hello world”字符串也相应的需要开辟内存空间。
因此我们使用StringBuffer类和StringBuild类来对此种变化字符串进行处理。

4.方法内改变String类型的对象(形参)的应用地址,方法外的实参引用地址不被改变

public class Demo10 {
public static String addStr(String string){
	string =  string + ",你变了";
	return string;
	}
public static void main(String[] args) {
	String string = new String();
	string = "啊,是小非肥啊";

	String addStr = addStr(string);
    //函数返回值
	System.out.println("addStr:    "+addStr);
    //主函数的string
	System.out.println("string:    "+string);

 	}

}

结果:

在这里插入图片描述

基本数据类型是不变的。引用对象是会改变的,但是包装类和String例外。

2.StringBuffer

1.StringBuffer类结构

在这里插入图片描述

父类
在这里插入图片描述

字符数组没有被final修饰所以是可以被改变的。

StringBuffer结构图
在这里插入图片描述

1.StringBuffer类被final修饰,是不可被继承的

2.StringBuffer本质是字符数组,不被final修饰所以是可以被更改的

3.线程安全的,因为StringBuffer的方法都是被Synchronized修饰的

在这里插入图片描述

3.StringBuffer缓冲区

3.StringBuilder

1.StringBuilder类结构

在这里插入图片描述

父类:
在这里插入图片描述

结构图

在这里插入图片描述

StringBuffer和StringBuilder的类结构图相同

父类

字符数组没有被final修饰所以是可以被改变的。

2.StringBuilder类被final修饰,是不可被继承的。

3.线程不安全的

3.StringBuilder缓冲区

5.StringBuffer和StringBuilder的区别

  1. StringBuffer线程安全(方法被synchronized),StringBuilder线程不安全。
  2. StringBuffer速度慢,适合多线程。StringBuilder速度快,适合单线程。
  3. StringBuffer和StringBuilder都继承了AbstractStringBuilder。
  4. StringBuffer和StringBuilder的类结构相同
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值