Java中的String、StringBuffer和StringBuilder用法和联系

“不经一番寒彻骨,怎得梅花扑鼻香”在人的一生当中有很多的机会和机遇,我们要认真的面对和冷静去选择!在职场上我们要懂得谦虚谨慎。加油哈码农们,相信我们的明天会更好!

一、String

    1、定义:Sting对象用于处理文本(字符串)

    2、用法:

        new String(s)

        String(s);

   3、实例:

第一种;new方式

String s1 = new String(“hello world”);
String s2 = new String(“hello world”);
System.out.println(s1 == s2);//输出false

第二种:

String s3 = “hello world”;
String s4 = “hello world”;
System.out.println(s3 == s4);//输出trre

二、StringBuffer

    1、定义:类的构造函数

    2、用法

StringBuffer(“Tom”) 在创建对象的时候赋值

append() 在缓冲区的尾部添加新的文本对象

insert() 在指定的下标位置添加新的文本对象

delete(int start, int end)

deleteCharAt(int index)

toString() 返回这个容器的字符串

indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。

substring(int start) 从开始的位置开始截取字符串

replace(int start int endString str) 使用给定 String 中的字符替换此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符

setCharAt(int index char ch) 指定索引位置替换一个字符

三、StringBuilder

    1、定义:StringBuilder是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。

    2、用法

(1)Append方法可用来将文本或对象的字符串表示形式添加到由当前StringBuilder对象表示的字符串的结尾处。

StringBuilder MyStringBuilders = new StringBuilder("Hello World!");
MyStringBuilders.Append("What's the weather like today?");
Console.WriteLine(MyStringBuilders);

(2)AppendFormat方法将文本添加到StringBuilder的结尾处,而且实现了IFormattable接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到StringBuilder的后面。以下示例使用AppendFormat方法将一个设置为货币值格式的整数值放置到StringBuilder的结尾。

int MyInts= 26
StringBuilder MyStringBuilders = new StringBuilder("你的总数是 ");
MyStringBuilders.AppendFormat("{0:C} ", MyInts);
Console.WriteLine(MyStringBuilders);

(3)Insert方法将字符串或对象添加到当前StringBuilder中的指定位置。

StringBuilder MyStringBuilders = new StringBuilder("Hello World!");
MyStringBuilders.Insert(6,"weather");
Console.WriteLine(MyStringBuilders);

(4)可以使用 delete方法从当前StringBuilder中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。

StringBuilder MyStringBuilders = new StringBuilder("Hiiiiiii");
MyStringBuilders.delete(3,4);
Console.WriteLine(MyStringBuilders);

(5)使用Replace方法,可以用另一个指定的字符来替换StringBuilder对象内的字符。

StringBuilder MyStringBuilders = new StringBuilder("Hello World!");
MyStringBuilders.Replace('!', '?');
Console.WriteLine(MyStringBuilders);

四、区别和联系

  1. 可变与不可变

    String通过查看String的源码我们知道String是通过字符数组来保存一个对象的,且在这个字符数组前面加了final修饰符,说明String对象是不可变的。这就导致每次String的操作就会生成新的对象,导致效率低下且浪费空间。
  2. 线程是否安全

    1. String对象不可变,可理解为它是线程安全的;
    2. StringBuffer 是线程安全的;
    3. StringBuider 是非线程安全的。

从源码可以看出, StringBuffer 在方法或调用方法前面加上了Synchronized 同步锁,所以是线程安全的。

 

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量(通常是16个字节),就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。

从 JDK 5 开始,为StringBuffer类补充了一个单个线程使用的等价类,即StringBuilder。与该类相比,通常应该优先使用StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

StringBuffer 和 StringBuilder 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而insert 方法则在指定的点添加字符

共同点

StringBuffer 和 StingBuilder 都继承自 AbstractStringBuilder(抽象类)

抽象类和接口的区别是:

  1. 抽象类可以定义一些子类公共的方法,子类只需要增加新的功能,而不需要重复写已经存在的功能。
  2. 接口只是定义一些常量和对方法的声明。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
StringStringBufferStringBuilder都是Java用于处理字符串的类。 String是一个不可变的字符串类,也就是说一旦创建了一个String对象,它的值就不能被修改。每次对String进行修改操作时,都会创建一个新的String对象,这样会浪费内存空间和时间。因此,当需要频繁地对字符串进行修改时,使用String并不高效。 StringBufferStringBuilder是可变的字符串类,它们可以被用来进行字符串的修改操作。StringBufferStringBuilder的主要区别在于StringBuffer是线程安全的,而StringBuilder是非线程安全的。这意味着在多线程环境下,如果有多个线程同时访问一个StringBuffer对象,它们是安全的;而多个线程同时访问一个StringBuilder对象时,可能会导致数据错乱。 使用StringBufferStringBuilder的场景通常是在需要频繁地对字符串进行修改的情况下。例如,在循环拼接字符串、在递归函数修改字符串等情况下,使用StringBufferStringBuilder可以提高性能。 如果需要将StringBufferStringBuilder转换为String对象,可以使用两种方式。一种是调用它们的toString()方法,将其转换为String对象。另一种是使用String的构造器String(StringBuffer buffer)来创建一个新的String对象,将StringBufferStringBuilder的内容复制到新的String对象。 总结起来,String是不可变的字符串类,而StringBufferStringBuilder是可变的字符串类,适用于需要频繁修改字符串的场景。转换为String对象可以通过调用toString()方法或使用String的构造器来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值