欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 常用类StringBuilder类使用教程,String类,StringBuilder类,StringBuffer 类的区别

程序员文章站 2022-06-01 11:55:16
...

一、String类,StringBuilder类,StringBuffer 类的区别

1.String 和 StringBuilder类的区别,

1.String是常量final,String的变化及其消耗内存,
2.StringBuider是可边的String,变化速度快,而且超出他的默认长度会自动扩容增加长度,十分方便。(但是官方说多线程会出现安全问题)
Java 常用类StringBuilder类使用教程,String类,StringBuilder类,StringBuffer 类的区别

2.String类,StringBuilder类,StringBuffer 类的区别

性质 String类 StringBuilder类 StringBuffer 类
快速 Yes
长度可边 Yes Yes
多线程安全 Yes Yes

JAVA 中的 StringBuilder 和 StringBuffer 适用的场景是什么?
最简单的回答是,stringbuffer 基本没有适用场景,你应该在所有的情况下选择使用 stringbuiler,除非你真的遇到了一个需要线程安全的场景,如果遇到了,请务必在这里留言通知我。
然后,补充一点,关于线程安全,即使你真的遇到了这样的场景,很不幸的是,恐怕你仍然有 99.99…99% 的情况下没有必要选择 stringbuffer,因为 stringbuffer 的线程安全,仅仅是保证 jvm 不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确。大多数时候,我们需要的不仅仅是线程安全,而是锁。
最后,为什么会有 stringbuffer 的存在,如果真的没有价值,为什么 jdk 会提供这个类?答案太简单了,因为最早是没有 stringbuilder 的,sun 的人不知处于何种愚蠢的考虑,决定让 stringbuffer 是线程安全的,然后大约 10 年之后,人们终于意识到这是一个多么愚蠢的决定,意识到在这 10 年之中这个愚蠢的决定为 java 运行速度慢这样的流言贡献了多大的力量,于是,在 jdk1.5 的时候,终于决定提供一个非线程安全的 stringbuffer 实现,并命名为 stringbuilder。顺便,javac 好像大概也是从这个版本开始,把所有用加号连接的 string 运算都隐式的改写成 stringbuilder,也就是说,从 jdk1.5 开始,用加号拼接字符串已经没有任何性能损失了。
如诸多评论所指出的,我上面说,"用加号拼接字符串已经没有任何性能损失了"并不严谨,严格的说,如果没有循环的情况下,单行用加号拼接字符串是没有性能损失的,java 编译器会隐式的替换成 stringbuilder,但在有循环的情况下,编译器没法做到足够智能的替换,仍然会有不必要的性能损耗,因此,用循环拼接字符串的时候,还是老老实实的用 stringbuilder 吧。
来至菜鸟教程

所以:建议使用 StringBuilder

4.源码解释:

Java 常用类StringBuilder类使用教程,String类,StringBuilder类,StringBuffer 类的区别

二、常用方法append() 在末尾添加数据,

1.必须传入参数,而且可以添加任意数据类型。

Java 常用类StringBuilder类使用教程,String类,StringBuilder类,StringBuffer 类的区别

1.源码解释:

Java 常用类StringBuilder类使用教程,String类,StringBuilder类,StringBuffer 类的区别

2.jdk api 解释:

Java 常用类StringBuilder类使用教程,String类,StringBuilder类,StringBuffer 类的区别

3. 实例代码

package Java学习.Java高级.常用类.StringBuilder常用类;

/**
 * StringBuilder 可以被多次修改而不产生新的对象。建议会改变的字符串使用。
 * String 是常量修饰,不能被修改,而且修改了也十分浪费内存。
 * 建议使用 StringBuilder
 */
public class StringBuilder常用类 {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        StringBuilder stringBuilder2 = stringBuilder.append("Hello StringBuilder");
        System.out.println("stringBuilder: " + stringBuilder);
        System.out.println("stringBuilder2: " + stringBuilder2);
        System.out.println("stringBuilder==stringBuilder2: " + (stringBuilder == stringBuilder2));//比较地址true
        // stringBuilder.append() 返回的是自己
    }
}

输出:

stringBuilder: Hello StringBuilder
stringBuilder2: Hello StringBuilder
stringBuilder==stringBuilder2: true

三、insert()方法。

  stringBuilder.insert(6,"I am ");
  System.out.println("插入 I am 后: "+stringBuilder);

sout:

插入 I am 后: Hello I am StringBuilder

1.源码解释:

Java 常用类StringBuilder类使用教程,String类,StringBuilder类,StringBuffer 类的区别

jdk api 解释:

(这是更多参数的方法,模式都差不多)
Java 常用类StringBuilder类使用教程,String类,StringBuilder类,StringBuffer 类的区别

四 toString () 方法,可以将 StringBuilder 对象转化为 String 对象。

相关标签: Java 高级