Java基础知识 | String/StringBuilder/StringBuffer

前沿:撰写博客的目的是为了再刷时回顾进一步完善,其次才是以教为学,所以如果有些博客写的较简陋,是为了保持进度不得已而为之,还请大家多多见谅。

一、字符串

字符串String and 可变字符串序列(StringBuilder/StringBuffer)

1.为什么有字符串?

为了便于理解人类不同语言,而创建的类。

字符串是引用变量类型,由byte[]实现的常量(在JDK1.9前是char[]),所以每次修改就会变成新对象,所以时空效率都低。

  • char[]也是由private和final修饰,意味着不可变且外部不能直接进行操作。

  • 字符串设计是不可变的,所以字符串有常量池中保存许多常量对象(常量池在方法区)

    • 在常量池中的对象能够被共享

2.为什么有StringBuffer?

String是不可变字符串时空效率低,所以需要有可变字符序列。

StringBuffer创建缓存空间,创建一定内存空间便于动态修改,效率相较String有所提升,并且支持多线程(方法有synchronized修饰)。

3.为什么有StringBuilder?

在实际拼接字符串中,往往是按照顺序拼接,很少会出现多线程并发的场景,但StringBuffer创建append方法时为了稳健性,使用了synchronized修饰,调用时先加锁,为了减少加锁时带来的额外性能消耗所以创建StringBuider。

StringBuilder则相较StringBuffer效率更高些,所以一般情况(线程安全情况)下使用时选择它。

4.如何使用String\StringBuffer\StringBuilder?

String\StringBuffer\StringBuilder三者共有常用方法:

length(); //获取长度
isEmpty(); //是否为空
charAt(i); //获取字符串中下标为i的字符
substring(i,i+1);//获取字符串中下标[i,i+1)的字符串子串

String\StringBuffer\StringBuilder三者共有我不熟悉方法:

toCharArray(); //将此字符串转换为一个新的字符数组返回
indexOf(xx);//返回xx字符串第一次出现的下标
toLowerCase/UpperCase();//字符串全变成小/大写
trim();//去除字符串前后空白符
intern();//结果在常量池中共享

StringBuffer\StringBuilder二者共有常用方法:

StringBuffer sb = new StringBuffer(s1);
//增删改插
append(); // 拼接方法
delete(int start, int end)//删除[start,end)之间字符
setCharAt(int index, xx)//替换[index]位置字符 
insert(int index,xx) //在[index]位置插入xx
reverse()//反转 
replace(int start, int end, String str)//替换[start,end)范围的字符序列为str
toString() //返回此序列中数据的字符串表示形式

String s1 = new String("字符串"); 与String s1 = "字符串"有区别吗?

  • 前面的先在堆中创建对象,再在常量池中创建常量“字符串”;

  • 后面的直接在常量池中创建常量“字符串”;

其他知识

结尾

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值