StringBuffer对String类型的操作

String类是所有项目开发中一定会用到的一个功能类,并且这个类拥有如下的特点:

  • 每一个字符串的常量都属于一个String类的匿名对象,并且不可更改;
  • String有两个常量池:静态常量池、运行时常量池
  • String类对象实例化建议使用直接赋值的形式完成,这样可以直接将对象保存在对象池之中以方便下次重用。

虽然String类很好使用,但是如果认真去思考也会发现其最大的弊端:内容不允许修改,虽然大部分情况下我们都不会涉及到字符串内容的频繁修改,但是依然会存在这样的情况,多以为了解决此问题,专门提供了一个StirngBuffer类实现字符串内容的修改处理。
**范例:**观察String与StringBuffer的对比
Stirng类对象的引用传递:

public class JavaApi {
    public static void main(String[] args) {
        String str = "Hello ";
        change(str);
        System.out.println(str);    //内容没有发生改变
    }
    public static void change(String temp){
        temp += "world";
    }
}

StirngBuffer并不像Stirng类那样有两种对象实例化,StringBuffer必须像普通类那样首先进行对象实例化,而后在才可以调用方法进行处理,而这个时候可以调用StringBuffer类中的如下方法:

  • 构造方法: public StirngBuilder(){};
  • 构造方法: public StringBuilder(String str){};
  • 数据追加: public StringBuilder append(数据类型 变量);相当于字符串的加操作。

StringBuffer类引用传递:

public class JavaApi {
    public static void main(String[] args) {
        StringBuffer btf = new StringBuffer("Hello ");
        change(btf);
        System.out.println(btf);    //内容没有发生改变
    }
    public static void change(StringBuffer temp){
       temp.append("world !");
    }
}

大多数情况下,很少会出现有字符串内容的改变,这种改变指的并不是针对于静态常量池的改变:
**范例:**分析一下已有问题

 public static void main(Stirng[] args){
    Stirng strA = "www.baidu.com";
    String strB = "www." + "mldn" +".com";
    System.out.println(strA == strB);
 }

这个时候的strB对象内容的改变不算改变,从更加严格的意义上来讲,对于现在的strB当程序编译之后会变为如下形式:

    String strB = "www." + "mldn" +".com";
StringBuffer buf = new StringBuffer();
buf.append("www.").append("mldn").append(".com);

所有的“+”在编译之后都变为了StirngBuffer中的append()方法,并且在程序中StirngBuffer与String类对象之间可以互相转换:

  • String类对象变为StringBuffer可以依靠StringBuffer的构造方法或者append()方法
  • 所有的类对象都可以通过toStirng()方法变为String对象。
    在StringBufferl类里面除了有字符串修改以外,实际上也提供了一些其他的方法:
    1、插入数据: publc StirngBuffer insert(int offset,数据类型 变量);
public static void main(String[] args) {
        StringBuffer btf = new StringBuffer();
         btf.append(".com").insert(0,"www.").insert(4,"baidu");
        System.out.println(btf);    //内容没有发生改变
    }

2、删除指定范围的数据: public StringBuffer delete(int start,int end);

    public static void main(String[] args) {
        StringBuffer btf = new StringBuffer();
         btf.append("hello world").delete(6,12).insert(6,"baidu");
        System.out.println(btf);    //内容没有发生改变
    }

3、字符串内容的反转

 public static void main(String[] args) {
        StringBuffer btf = new StringBuffer();
         btf.append("hello world");
        System.out.println(btf.reverse());    //内容没有发生改变
    }

实际上与StringBuffer类还有一个类似的功能类:StringBuilder类,这个类是JDK1.5的时候提供的,该类中提供的方法,与StringBuffer的功能相同,最大的区别在于StringBuffer类中的方法属于线程安全的,全部方法使用synchronized关键字标注,而StringBuilder类属于非线程安全的。

**面试题:请解释String、StringBuffer、StringBuilder的区别?

  • Stirng类是字符串的首选型,其最大特点是内容不允许修改;
  • StringBuffer和StringBuilder类的内容可以进行修改;
  • StringBuffer是在JDK1.0的时候提供的,属于线程安全的操作,StringBuilder是在JDK1.5的时候提供的,属于非线程安全的操作。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值