StringBuilder和StringBuffer的区别和用法

先赞后看,养成习惯!!! ^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力,点赞后不要忘记关注我哦

个人主===页:伯明翰java

文章专栏:JavaSE

如有错误,请您指正批评 ^ _ ^

StringBuffer和StringBuilder的区别

一.String,StringBuffer与StringBuilder

  • String字符串常量:String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。
    StringBuffer与StringBuilder是字符串变量,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
  • StringBuffer:可变字符串、效率低、线程安全;
  • StringBuilder:可变字符序列、效率高、线程不安全;

StringBuilder和StringBuffer的用法

java 复制代码
public static void main(String[] args) {
 StringBuilder sb1 = new StringBuilder("hello");
 StringBuilder sb2 = sb1;
 // 追加:即尾插-->字符、字符串、整形数字 
 sb1.append(' '); // hello
 sb1.append("world"); // hello world
 sb1.append(123); // hello world123
 System.out.println(sb1); // hello world123
 System.out.println(sb1 == sb2); // true
 System.out.println(sb1.charAt(0)); // 获取0号位上的字符 h 
 System.out.println(sb1.length()); // 获取字符串的有效⻓度14 
 System.out.println(sb1.capacity()); // 获取底层数组的总⼤⼩ 
 sb1.setCharAt(0, 'H'); // 设置任意位置的字符 Hello world123 
 sb1.insert(0, "Hello world!!!"); // Hello world!!!Hello world123
 System.out.println(sb1);
 System.out.println(sb1.indexOf("Hello")); // 获取Hello第⼀次出现的
位置 
 System.out.println(sb1.lastIndexOf("hello")); // 获取hello最后⼀次出现的位置 
 sb1.deleteCharAt(0); // 删除⾸字符 
 sb1.delete(0,5); // 删除[0, 5)范围内的字符 
 String str = sb1.substring(0, 5); // 截取[0, 5)区间中的字符
以String的⽅式返回 
 System.out.println(str);
 sb1.reverse(); // 字符串逆转 
 str = sb1.toString(); // 将StringBuffer以String的⽅式返回 
 System.out.println(str);
}

从上述例从上述例⼦可以看出:String和StringBuilder最⼤的区别在于String的内容⽆法修改,⽽StringBuilder的内容可以修改。频繁修改字符串的情况考虑使⽤StringBuilder。

注:String和StringBuilder类不能直接转换。如果要想互相转换,可以采⽤如下原则:

  • String变为StringBuilder:利⽤StringBuilder的构造⽅法或append()⽅法
  • StringBuilder变为String:调⽤toString()⽅法。
    tringBuffer和StringBuilder从⽅法的功能上来说没有太⼤区别,唯⼀的区别在于⽅法的声明上会存在⼀下区别:


    StringBuffer采⽤同步处理,属于线程安全操作;⽽StringBuilder未采⽤同步处理,属于线程不安全操作
相关推荐
weixin_BYSJ19876 分钟前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
栋***t11 分钟前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构
今儿敲了吗14 分钟前
Python——函数基础
开发语言·笔记·python
CHANG_THE_WORLD19 分钟前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
xexpertS21 分钟前
CI/CD 熔断机制:如何通过编排级熔断器提升开发者效率
java·linux·运维
kels88991 小时前
单连接动态增减订阅:股票行情API后端降负载实战方案
开发语言·笔记·python·信息可视化·金融
zy happy1 小时前
VMware虚拟机添加新的硬盘
java·linux·jvm·docker
a4493153621 小时前
MacBook USB-C不充电故障诊断:从PD握手到主板供电链路
c语言·开发语言·macos·电脑
德福危险1 小时前
从目录枚举到bash破壳漏洞、从流量抓包到组权限提权:靶机练习之symfonos3
开发语言·bash
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列