String StringBuilder StringBuffer三者的联系与区别

                                 String StringBuilder StringBuffer三者的关系
由于先学的C++嘛。平常刷题也就是用用String ,char数组什么的。之前一次测试的时候惊喜的发现,在java里面不能直接输入整型char字符整型。会显示是异常类。emmm,卡了一个小时,后来发现必须要用时间类了,生计所迫只能自学了嘛。
哪里不会学哪里嘛,所以我们来先研究一下字符串String类型。以及延伸出来的StringBuilder StringBuffer类。
1)String,字符串常量。也就是说String对象一旦创建之后,对象是不可更改的。
String a = "wo";
System.out.println(a);
a = a + "zeihaokan";
System.out.println(a);
        输出结果肯定是两行嘛。
        wo。
        wozeihaokan。
        清晰明了的两句大实话。看起来像一串赋值语句,其实是先创建了一个String对象a,并且把"wo"赋值给a。然后第三行的时候重新创建了一个也叫a的对象,之前的a就被(GC)给回收掉了,所以String类型就是一个不断创建新的对象,并且将旧的对象回收的一个过程,执行速度就不敢恭维了。
2)String StringBuilder StringBuffer三者的区别
①运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String
②String字符串常量而StringBuilder和StringBuffer均为字符串变量
    ③String:适用于少量的字符串操作的情况
    StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
    StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
3)StringBuilder StringBuffer两者的比较。
        当我们如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。当然了,如果说要是简单的OJ提交的话,还是使用StringBuilder比较好。
4)StringBuffer的使用方法
        1.构造函数.
            StringBuffer();构造一个没有任何字符的StringBuffer类。
            StringBuffer(int length);构造一个没有任何字符的StringBuffer类,并且,其长度为length。
            StringBuffer(String str); 以str为初始值构造一个StringBuffer类。
          2.append()方法。
            StringBuffer的append方法添加object,实质为object的toString返回值(String信息)加入StringBuffer尾部。这个向字符串缓冲区追加的元素的参数可以是布尔量、字符、字符数组、双精度数、浮点数、整型数、长整型数对象类型的字符串、字符串、和StringBuffer类等。如果添加的字符超出了字符串缓冲区的长度,java将自动进行扩充。
        3.insert()方法。
            StringBuffer a = new StringBuffer("woshuai");//调用insert方法前结果:woshuai
            a.insert(2,"字符串zei").
            System.out.println(a);//调用insert方法后结果:wozeishuai
        4.int capacity();返回当前StringBuffer对象(字符串缓冲区)的总空间,而非字符号串的长度。
        5.char charAt(int index);在当前StringBuffer对象中取索引号为index的字符。
第一个字符的索引号为0.
        6.StringBuffer delete(int start, int end):删除当前StrinBuffer对象中以索引号start开始,到end结束的子串。
        7.StringBuffer deleteCharAt(int index);删除当前StringBuffer对象中索引号为index的字符.
        8.void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)从当前StringBuffer对象的索引号srcBegin开始,到srcEnd结束的子串,复制到字符数组dst中,并且从dst的索引号dstBegin开始。
            eg: StringBuffer e = new StringBuffer("sb I love ad!");
                char[] i = {'I', ' ', 'l', 'o', 'v', 'e', ' ', 's', 'b'};
                e.getChars(10,12,i,7);
                System.out.println(i);
                System.out.print(e.charAt(10));
                System.out.print(e.charAt(11)+":");
                System.out.println(e);
                            输出结果:I love ad
                   ad:sb I love ad!
        9.int indexOf(String str):返回当前StringBuffer对象中,第一个满足str子串的位置。
        10.int indexOf(String str,int fromIndex):从当前StringBuffer对象的fromIndex开始查找,返回第一个满足子串的位置。
        11.int length():返回当前StringBuffer对象(字符缓冲区)中,字符串的长度。
        12.int lastindexOf(String str):返回当前StringBuffer对象中,最后一个满足子串的位置。
        13.int lastindexOf(String str, int fromIndex):从当前StringBuffer对象的fromIndex开始查找,返回最后一个满足子串的位置。
        14.StringBuffer replace(int start, int end, Strin g str):替换当前StringBuffer对象的字符串,从start开始,到end结束的位置替换成str。
        15.StringBuffer reverse():将字符串翻转。
            eg:StringBuffer a = new StringBuffer("13145678);
    System.out.println("a:" + a);
            结果为a:87654131;
        16.void setCharAt(int index, char ch):设置索引号index的字符为ch。
        17.void setLength(int newLength):重新设置字符串缓冲区中的字符串的长度,如果newLength小于当前的字符串长度,将截取多余的字符。
            eg:StringBuffer a = new StringBuffer("012234564");
    a.setLength(5);
    System.out.println("a" + a);
                结果为a:01223
        18.String substring(int start):取当前StringBuffer对象中,从start开始到结尾的子串。
        19.String substring(int start, int end):取当前StringBuffer对象中,从start开始到end的子串。
        20.String toString():将当前StringBuffer对象转化成String对象。
5)注意事项:在初始化变量的时候,如果你这么初始化String a = "wo" + "zei" + "haokan"在JVM眼里这个就是String a = "wozeihaokan"。
         如果你的字符串来自于另外的String对象的话,速度就没有那么快了。譬如:
            String a = "wo";
            String b = "zei";
            String c = "haokan";
            String str = a + b + c;
        这时候JVM就会规规矩矩的按照原来的方式去做,str对象的生成速度就不会有之前的a的生成速度快了。所以说在String对象的创建过程中,要注意这一点。

6)写在最后:

                以上这些总结的内容绝大多数是我从网上以及书上找来的,写在这里是想把自己所学的分享给大家,方便大家学习,同时也有助于自己记忆,如果有哪里不对的恳请指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值