Java中String、StringBuffer、StringBuilder详解

Java中String、StringBuffer、StringBuilder详解

StringBufferStringBuilder实现了Appendable(可拼接的)接口,所以其是可变的字符串

1. String

String在Java中经常使用,以至于有的时候很多初学者把它当做一个基本数据类型。但其实,你每次将一个字符串赋给一个变量,或者输出一个字符串,其实都是创建了一个字符串对象。比如说System.out.println(“hello world”);其实就是创建了一个字符串对象。

  • String本质是一个引用对象,属于String类,当我们创建一个String类型的字符串的时候,本质上是建了一个String对象
  • 而在String类的源码中,String对象的创建本质是一个char数组。所以由于数组长度的不可变性,则决定了String字符串的字符序列是不可变
String s = "Hello";
相当于
char[] data = {'H','e','l','l','o'};
String s = new String(data);
String s = “hello”;
以下代码并没有hello的字符串改变,而是新建了一个String对象指向s变量,hello和world同时存在堆内存中
String s = “world”;

2. StringBuffer(线程安全的,效率较低)

  • StringBuffer代表一个字符序列可变的字符串。被创建以后可通过StringBuffer类提供的一系列方法来改变字符串。当需要使用这个StringBuffer字符串时,必须使用toString()方法将其转换为字符串对象。
  • StringBuffer类中有一个transient 修饰的暂态char数组。创建对象时默认数组长度为16,当对象中容量占用超过一半时,数组会扩容。但是扩容效率低,推荐将初始StringBuffer长度定在一个合适的大小。
//创建一个空的StringBuffer对象,默认大小16
StringBuffer sb = new StringBuffer();
//通过String字符串创建StringBuffer对象,大小为字符串长度加16
StringBuffer sb = new StringBuffer("Hello");
//通过append方法追加字符串
sb.append(“world”);
//输出StringBuffer对象
System.out.println(sb.toString());

3. StringBuilder(线程不安全的,效率较高)

  • StringBuilder与StringBuffer用法基本一致,但由于StringBuffer为线程安全的,效率较低。StringBuilder没有实现线程安全,则效率略高。通常情况下,应该考虑使用StringBuilder。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值