博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
StringBuffer对String类型的操作
阅读量:4185 次
发布时间:2019-05-26

本文共 2791 字,大约阅读时间需要 9 分钟。

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的时候提供的,属于非线程安全的操作。

转载地址:http://knfoi.baihongyu.com/

你可能感兴趣的文章
Mysql 内存表和临时表的区别
查看>>
数据库服务器升级内存需要考虑的问题 .
查看>>
sql临时表在哪啊
查看>>
Elasticsearch 当数据库使:Join
查看>>
SQL语句的执行原理分析
查看>>
CPU的几核
查看>>
重置IE设置
查看>>
SQL子句执行顺序和Join的一点总结
查看>>
sql(join on 和where的执行顺序)
查看>>
一个因为SQL join引发的内存泄露
查看>>
Oracle体系结构详解
查看>>
Oracle体系结构详细图解
查看>>
Shared Everything和share-nothing区别
查看>>
SAS硬盘和SATA硬盘最大的区别是什么?
查看>>
SATA、SAS、SSD三种硬盘存储性能数据
查看>>
Greenplum技术浅析
查看>>
SQL如何查询一张表的所有字段并按其中一个字段进行分组
查看>>
GROUP BY...HAVING 组合查询大总结
查看>>
MATLAB
查看>>
金融术语科普 , 什么是GP、LP、PE、VC和FOF
查看>>