首页 > 母婴教育 > 心里学 >

生成字符串对象的几种方法

来源:互联网 2023-03-20 14:57:34 110

在java中,字符串对象是最常用的字符串处理对象,可以用于创建字符串对象的类包括String、StringBuilder和StringBuffer。7HW办公区 - 实用经验教程分享!

首先说一下三者的区别和联系:三者都是final类型的类,都不能被继承;其次他们实现的数据结构都是字符数组,在这一点String和StringBuilder、StringBuffer的区别是,String的字符数组是常量,也即是String对象的值一旦创建就不可变,所以每次7HW办公区 - 实用经验教程分享!

给String类型的变量赋值时,其实很可能都是在创建一个新的对象(为什么说很可能,是因为有常量池的概念,请仔细参考下面的链接)。7HW办公区 - 实用经验教程分享!

StringBuffer和StringBuilder可以处理可变的字符串,而他们的区别是StringBuffer支持线程安全。7HW办公区 - 实用经验教程分享!

对于其创建方式,则要去看Java的API,不过本文将介绍最常用的创建对象方式。7HW办公区 - 实用经验教程分享!

1谈一谈对java String类型的理解7HW办公区 - 实用经验教程分享!

工具/原料

  • String
  • StringBuilder、StringBuffer

方法/步骤

  • 1

    首先来说String类。最常见的创建方式莫过于,直接定义个字符串String str="123";7HW办公区 - 实用经验教程分享!

    使用这种定义方式,java会在对堆中创建一个对象,并把“123”存储在其final的char数组中,然后把对象的引用存储在常量池和StringTable中,而str变量则指向了常量池的引用。7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

  • 2

    第二种常用的创建方式是new String(String str)的方式。7HW办公区 - 实用经验教程分享!

    比如new String("123");对于这种方式创建的对象java会在堆中直接创建一个新的String实例,只不过其final的char数组指向了“1”中char数组的地址。7HW办公区 - 实用经验教程分享!

    这叫共享字符数组:share。下面会提到。7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

  • 3

    在文件操作中经常会用到两种创建字符串的方式,把文件流中的字符存储到String中,然后再存储到其他地方。7HW办公区 - 实用经验教程分享!

    第一种:String(char value[]),将一个字符数组转化成一个String对象。7HW办公区 - 实用经验教程分享!

    第二种:String(char value[], int offset, int count),将索引offset到offset count位置的字符转化成一个String对象。7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

  • 4

    再来看StringBuilder,创建一个StringBuilder的字符串对象,new StringBuilder(String str)或者new StringBuilder()。7HW办公区 - 实用经验教程分享!

    因为StringBuilder实例是可变的字符串对象,所以其提供了append方法,用于追加字符串。7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

  • 5

    StringBuffer和StringBuilder类似。正如我们所猜想的,StringBuffer如果想线程安全就需要加锁。7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

  • 6

    还有一种最为常见的创建方式就是toString(),每个类都有这个方法,这也是调用了Sting类的构造方法去创建字符串对象。7HW办公区 - 实用经验教程分享!

    比如StingBuffer中的toString。7HW办公区 - 实用经验教程分享!

    不过StringBuffer为什么被称为Buffer哪,他是不是有缓存的功能,是的。(1)StringBuffer定义了一个:transient char[] toStringCache,这个字符数组只有在StringBuffer实例调用了toString方法才会赋值,StringBuffer实例每次的修改都会将toStringCache置为空。7HW办公区 - 实用经验教程分享!

    (2)再来看上面的toString方法。如果toStringCache不空,直接根据toStringCache创建String对象,并且此String对象的char数组直接指向toStringCache(共享数组)。如果为null,则给其赋值,然后再new一个Stirng对象。7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

  • 6该信息非法爬取自百度经验
  • 7

    (3)所以说,如果StringBuffer实例创建完成后,不对实例做修改;然后多次调用toString获取其字符串的值,是非常高效的。7HW办公区 - 实用经验教程分享!

    (4)为什么说高效:这就需要和StringBuilder对比一下了,看一眼StringBuilder的toStirng,他是真的创建了一个字符数组,而StringBuffer则是共享。7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

    生成字符串对象的几种方法7HW办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!7HW办公区 - 实用经验教程分享!


    标签:

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码