JAVA学习——字符串(一)

String、StringBuffer、StringBuilder

一、String:字符串常量

首先从源码分析:

/** The value is used for character storage. */
private final char value[];
 
/** The offset is the first index of the storage that is used. */
private final int offset;
 
/** The count is the number of characters in the String. */
private final int count;

String底层是一个final类型的字符数组,所以String的值是不可变的,每次对String的操作都会生成新的String对象,造成内存浪费。

而StringBuffer和StringBuilder就不一样了,他们两都继承了AbstractStringBuilder抽象类,从AbstractStringBuilder抽象类中我们可以看到,他们的底层都是可变的字符数组,所以在进行频繁的字符串操作时,建议使用StringBuffer和StringBuilder来进行操作。
 

二、StringBuffer :字符串变量

优点:

  • 线程安全,可变的字符序列。字符串缓冲区和String一样但是可以修改。
  • StringBuffer可以安全地被多个线程使用。会在必要的时候进行同步。
  • 底层实现方式为字节数组。

三、StringBuilder:字符串变量

优点:可变的字符序列。但是速度要比SringtBuffer快得多。

此类提供与StringBuffer相同的方法,但不保证同步,缺乏安全性,不能安全使用多线程。

四、为什么不建议在for循环中使用“+”进行字符串拼接?

因为String 是 字符串常量 , 所以对 String 进行改变时,实际生成了一个的 String 对象,然后将指针指向新的 String 对象,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低

参考链接:https://blog.csdn.net/qq877728715/article/details/102950711

参考博客:
Java学习-为什么不建议在for循环中使用“+”进行字符串拼接?_moota的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值