Java基础类库之StringBuffer类用法详解

 更新时间:2022年07月26日 14:14:29   作者:样子的木偶  
String类是在所有开发项目开发之中一定会使用的一个功能类。虽然String类很好用,但也有弊端——内容不允许频繁修改,所以为了解决问题,我们提供了StringBuffer类。本文就来讲讲StringBuffer类的用法

StringBuffer类

String类是在所有开发项目开发之中一定会使用的一个功能类,并且这个类拥有如下功能

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

虽然String类很好用,但是我们发现它也有弊端,就是内容不允许频繁修改,所以为了解决问题,我们提供了StringBuffer类

StringBuffer 并不像String类那样拥有两种实例化方法,必须要想普通方法一样调用方法,这个时候可以考虑一下方法

  • 构造方法:public StringBuffer();
  • 数据追加:public StringBuffer append(数据类型、变量),相当于字符串中的“+”操作;
  • 构造方法:public StringBuffer(String str),相当于初始化

范例:观察String与StringBuffer对比

String类对象引用传递

public class JavaAPIDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str ="hello";
		change(str);
		System.out.println(str);
	}
	public static void change(String temp) {
		temp+="word";
	}

}

str内的值没有发生改变

StringBuffer类对象引用传递

public class JavaAPIDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuffer buf =new StringBuffer("Hello  ");
		change(buf);
		System.out.println(buf);
	}
	public static void change(StringBuffer temp) {
		temp.append("World");
	}

}

buf内的值发生了改变

由此可见String内的值不能改变,StringBuffer内的值可以改变,这就是两这最主要的区别

实际上大部分的情况下,很少会出现有字符串内容的改变,这种改变指的并不是针对静态常量池的改变;

范例:分析一下已有问题

public class JavaAPIDemo {

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

}

在这个时候strB对象里面的内容并不是真正改变,或者更严格的将,对于现在的strB当程序编译的时候就相当于下面形式

buf.append(“www.”).append(“baidu.”).append(“com”);

也就是说所有的”+“在我们编译后都变为了StringBuffer中的append()方法,并且在程序中String类对象和StringBuffer类对象本来就可以互相转换

  • String类对象变为StringBuferr可以依靠StringBuffer类构造方法或者使用append()方法
  • 所以类的对象都可以通过toString()方法将其变为String类型

在StringBuffer类里面除了可以支持字符串内容修改之外,实际上也添加了很多String所不具有的方法

public class JavaAPIDemo {

	public static void main(String[] args) {
	
	StringBuffer buf=new StringBuffer();
	buf.append(".com").insert(0,"www.").insert(4, "baidu");
	System.out.println(buf);
	}

}

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

public class JavaAPIDemo {

	public static void main(String[] args) {
	
	StringBuffer buf=new StringBuffer();
	buf.append("Hello World!").delete(6, 12);
	System.out.println(buf);
	}

}

-字符串内容反转:public StringBuffer reverse();

public class JavaAPIDemo {

	public static void main(String[] args) {
	
	StringBuffer buf=new StringBuffer();
	buf.append("Hello World!");
	System.out.println(buf.reverse());
	}

}

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

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

String类是字符串的首选类型,其最大的特点是内容不允许修改;

StringBuffer与StringBuilder类的内容允许修改;

StringBuffer是在JDK1.0的时候提供的,属于线程安全操作,而StringBuilder是在JDK1.5的时候提供的不是线程安全操作

到此这篇关于Java基础类库之StringBuffer类用法详解的文章就介绍到这了,更多相关Java StringBuffer类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis中PageHelper不生效的解决方案

    MyBatis中PageHelper不生效的解决方案

    这篇文章主要介绍了MyBatis中PageHelper不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Go Java算法之解码方法示例详解

    Go Java算法之解码方法示例详解

    这篇文章主要为大家介绍了Go Java算法之解码方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • spring jdbctemplate的用法小结

    spring jdbctemplate的用法小结

    jdbcTemplate是spring框架中提供的一个对象,是对原始繁杂的jdbc 对象的简单封装,本文通过实例代码介绍spring jdbctemplate的用法小结,需要的朋友可以参考下
    2023-04-04
  • Java多线程使用阻塞队列实现生产者消费者模型详解

    Java多线程使用阻塞队列实现生产者消费者模型详解

    这篇文章主要介绍了Java多线程使用阻塞队列实现生产者消费者模型详解,主要讲解阻塞队列的特性、实际开发中常用的到的生产者消费者模型,以及生产者消费者模型解耦合、削峰填谷的好处,需要的朋友可以参考下
    2023-07-07
  • mybatis Plus 多表联合查询的实现示例

    mybatis Plus 多表联合查询的实现示例

    这篇文章主要介绍了mybatis Plus 多表联合查询的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java垃圾回收finalize()作用详解

    Java垃圾回收finalize()作用详解

    这篇文章主要为大家详细介绍了Java垃圾回收finalize()作用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • 使用BigDecimal去掉小数点后无用的0

    使用BigDecimal去掉小数点后无用的0

    这篇文章主要介绍了使用BigDecimal去掉小数点后无用的0操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 可能是全网最详细的springboot整合minio教程

    可能是全网最详细的springboot整合minio教程

    MinIO是全球领先的对象存储先锋,在标准硬件上,读/写速度上高达183 GB/秒和171 GB/秒,下面这篇文章主要给大家介绍了关于springboot整合minio的相关资料,这个教程可能是全网最详细的,需要的朋友可以参考下
    2022-06-06
  • IDEA中的.iml文件和.idea文件的作用及意义

    IDEA中的.iml文件和.idea文件的作用及意义

    iml是 项目标识文件,每一个模块都有一个iml文件,存储模块的相关信息,跟eclipse的project文件是一样的功能,这篇文章主要介绍了IDEA中的.iml文件和.idea文件的作用,需要的朋友可以参考下
    2023-09-09
  • java8日期工具类封装的实战记录

    java8日期工具类封装的实战记录

    java time包中的是类是不可变且线程安全的,新的时间及日期API位于java.time中,下面这篇文章主要给大家介绍了关于java8日期工具类封装的相关资料,需要的朋友可以参考下
    2021-09-09

最新评论