String,StringBuffer,StringBuilder

1.String

1.1 String的介绍

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence

String不能被任何类所继承,而且一旦一个String对象被创建, 包含在这个对象中的字符序列是不可改变的, 包括该类后续的所有方法都是不能修改该对象的,直至该对象被销毁。实现了 Serializable接口,这是一个序列化标志接口,还实现了 Comparable 接口,用于比较两个字符串的大小(按顺序比较单个字符的ASCII码),后面会有具体方法实现;最后实现了 CharSequence 接口,表示是一个有序字符的集合。

alt

CharSequence与String都能用于定义字符串,但CharSequence是个接口,Sting实现了它。 所以也可以把CharSequence看做String的父类。

1.2 String的四种初始化

public class test {
    public static void main(String[] args) {
        //1.直接赋值,在堆中的常量池中创建该字符串对象
        String str1="hello";
        System.out.println("str1 = " + str1);

        //2.通过构造方法创建对象
        //在堆中创建对象,并把该对象的拷贝放到常量池中
        String str2 = new String("hello");
        System.out.println("str2 = " + str2);


        //3.通过字符数组创建对象
        //首先创建字符数组,并且通过构造方法传入此数组来创建对象,此对象不入常量池
        char[] chars =new char[]{'b', 't', 'd'};
        String str3 = new String(chars);
        //String str3 = new String(new char[]{'b', 't', 'd'});
        System.out.println("str3 = " + str3);

        //4.通过String类的静态方法valueOf(任意数据类型)->转为字符串
        String str4 = String.valueOf("dc");
        System.out.println("str4 = " + str4);
        String str5 = String.valueOf(15);
        System.out.println("str5 = " + str5);
    }
}

alt

1.3 String类常见的操作

参考链接:https://blog.csdn.net/xu130130/article/details/50297517

2.StringBuffer类

2.1 StringBuffer类介绍

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

在Java中,由于String类是final类型的,所以使用String定义的字符串是一个常量,因此它一旦创建,其内容是不可以改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。而StringBuffer类(也称字符串缓冲区)来操作字符串。 String和StringBuffer最大的区别是StringBuffer的内容和长度是可以改变的,StringBuffer类似于一个字符容器,当其添加或者删除字符时,所操作的都是这个字符容器,因此不会产生新的StringBuffer对象。

alt

2.2 StringBuffer类的常用方法

方法申明 功能描述
StringBuffer append(String str) 添加字符到StringBuffer对象中末尾
StringBuffer insert(int offset, String str) 在StringBuffer对象中的offset位置插入字符串str
StringBuffer deleteCharAt(int index) 移除StringBuffer对象中指定位置的字符
StringBuffer delete(int start, int end) 移除StringBuffer对象中指定范围的字符或字符串
StringBuffer replace(int start, int end, String str) 将StringBuffer对象中指定范围的字符或字符串用新的字符串str代替
void setCharAt() 修改指定位置index处的字符
String toString() 返回StringBuffer缓冲区中的字符串对象
StringBuffer reverse() 将此StringBuffer对象用其反转的形式取代

3.StringBuilder类

3.1 StringBuilder类的介绍

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

jdk1.5以后出现了功能和StringBuffer一模一样的对象,就是StringBuilder。 StringBuilder类是一种线程不安全的类,是一种字符串缓冲区,可存储任意类型数据,进去之后变成可变字符串。它效率高的特点十分突出,该类常用于字符串拼接操作,对比普通String类的拼接,速度约是10的3次方倍。在拼接完成后,再用toString()方法转为String类进行其它操作。

alt

3.2 StringBuilder类的常用方法

与StringBuffer相同(可以看源码

4.String,StringBuilder,StringBuffer的区别

  • ① String类定义的字符串是常量,内容和长度是无法改变的。StringBuffer表示字符容器,其内容和长度可以随时修改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类即可,但是如果需要对字符串进行增删操作,则使用StringBuffer类。 参考链接:https://blog.csdn.net/qq_46649587/article/details/106981825

  • ② String重写了Object的equals()方法,而StringBuffer类和StringBuilder没有重写equals()方法。

  • ③ String类对象可以用操作符+进行连接,,而StringBuffer和StringBuilder对象之间不能。

  • ④ StringBuffer和StringBuilder两者的区别:a. StringBuffer和StringBuilder的功能相似,且两个类中的提供的方法基本相同。 b. StringBuffer是线程同步的,并且线程安全,通常用于多线程。 c. StringBuilder是线程不同步的,所以性能略高,通常用于单线程。故StringBuilder如果需要这样的同步,可以使用StringBuffer或者自己用加同步锁。

全部评论

相关推荐

07-14 13:47
门头沟学院 Java
Lynn012:你评估好自己的位置了吗《顶尖应届》
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
07-16 17:55
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-21 11:33
昨天是学校最后一场招聘会,鼠鼠去参加了,全场只有一个招聘java的岗位,上来先做一份笔试题,做完后他拿张纸对答案,然后开始问简历上的问题,深圳小厂,6-8k(题目如下),后面还有两轮面试。然后我就在招聘现场逛呀逛,看到有公司招聘电商运营,给的比上年的小厂还多,鼠鼠就去了解了下,然后hr跟鼠鼠要了份简历,虽然我的简历上面全是求职Java开发相关的内容,但是hr还是鼓励我说没关系,她帮我把简历给老板看看,下周一会给我通知。招聘会结束后鼠鼠想了一段时间,也和朋友聊了聊,发现我可能是不太适合这个方向,然后就跟爸爸说回家了给我发条微信,我有些话想跟他说说。晚上爸爸到家了,跟我发了条微信,我立马跑出图书馆跟他打起了电话,这个通话长达一个小时,主要是跟爸爸坦白说我不想找这行了,是你的儿子太没用了,想试试其他行业。然后爸爸也跟我说了很多,说他从来没有希望我毕业后就赚大钱的想法,找不到就回家去,回家了再慢慢找,实在找不到就跟他干(帮别人装修房子,个体户),他也知道工作不好找,让我不要那么焦虑,然后就是聊一些家常琐事。对于后面的求职者呢我有点建议想提一下,就是如果招实习的时间或者秋招开始,而你的简历又很差的情况下,不要说等做好项目填充完简历之后再投,那样就太晚了,建议先把熟悉的项目写上简历,然后边投边面边完善,求职是一个人进步的过程,本来就比别人慢,等到一切都准备好后再投岂不是黄花菜都凉了。时间够的话还是建议敲一遍代码,因为那样能让你加深一下对项目的理解,上面那些说法只是针对时间不够的情况。当然,这些建议可能没啥用,因为我只是一个loser,这些全是建立在我理想的情况下,有没有用还需其他人现身说法。上篇帖子没想到学校被人认了出来,为了不丢脸只能匿名处理了。
KPLACE:找研发类或技术类,主要还是要1.多投 2.多做准备,很多方面都要做准备 3.要有心理准备,投累了就休息一两天,再继续,要相信自己能找到
投递58到家等公司7个岗位
点赞 评论 收藏
分享
07-18 14:55
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务