String StringBuffer StringBuilder

Posted codeing-boy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String StringBuffer StringBuilder相关的知识,希望对你有一定的参考价值。

String

在String中,String不是基本数据类型,String的实现是通过char数组实现,char数组是final不可变类型,

private final char[] value;

String类也是final,由于String不是基本数据类型,所以默认值是null;

注意区分 null, “   ”,和new String();

Null是将string对象指向null,在堆里边没有String 对象指向的引用,

“  ”:String 在编程的过程中经常使用,所以允许它直接赋值就和基本数据一样(但它并不是基本数据类型)

New String() 调用构造方法创建一个string对象,

public String()

  { this.value = "".value; }

在字符串中直接赋值的时候会有一个先放到字符串池中,直接赋值的时候会在先在字符串池中查找,如果存在,那么直接将引用复制到对象,否则新建一个对象;可以节约内存空间,提高效率

在字符串比较过程是 == 比较的是地址(引用) 比较值需要使用equals()

常见的方法:

         equals()   ——判断内容是否相同。

         compareTo() ——判断字符串的大小关系。

         compareToIgnoreCase(String int)    ——在比较时忽略字母大小写。

         == ——判断内容与地址是否相同。

         equalsIgnoreCase() ——忽略大小写的情况下判断内容是否相同。

         reagionMatches() ——对字符串中的部分内容是否相同进行比较(详情请参考API)。

          charAt(int index) ——返回指定索引index位置上的字符,索引范围从0开始。

          indexOf(String str)——从字符串开始检索str,并返回第一次出现的位置,未出现返回-1。

          indexOf(String str,int fromIndex);——从字符串的第fromIndex个字符开始检索str。

          lastIndexOf(String str)——查找最后一次出现的位置。

          lastIndexOf(String str,int fromIndex)—-从字符串的第fromIndex个字符查找最后一次出现的位置。

          starWith(String prefix,int toffset)—–测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

          starWith(String prefix)——测试此字符串是否以指定的前缀开始。

          endsWith(String suffix)——测试此字符串是否以指定的后缀结束。

          public String subString(int beginIndex)——返回一个新的字符串,它是此字符串的一个子字符串。

          public String subString(int beginIndex,int endIndex)——返回的字符串是从beginIndex开始到endIndex-1的串。

           public String replace(char oldChar,char newChar)替换字符

         更多的看看API

StringBuffer

StringBuffer和String一样都是用来存放字符串的,但是与String实现方式不同,在对字符串的修改时不会创建新的对象,String的修改回生成一个新的对象

StringBuffer 必须通过new来创建对象,对字符串的追加删除修改都比较灵活,

 1、append():追加指定内容到当前StringBuffer对象的末尾,类似于字符串的连接,这里StringBuffer对象的内容会发生改变。

      2、insert:该类方法主要是在StringBuffer对象中插入内容。

      3、delete:该类方法主要用于移除StringBuffer对象中的内容。

StringBuilder

StringBuilder也是一可变的字符串对象, 不是线程安全的,所以的速度是最快的,主要用于追加和修改

 

三者区别

String

StringBuffer

StringBuilder

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间

StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量

可变类,速度更快

不可变

可变

可变

 

线程安全

线程不安全

上表来自:https://blog.csdn.net/weixin_41101173/article/details/79677982

 

拼接字符字符串时效率关系:append> contact>+

 

我目前还在学习,在学习期间努力每周写一篇,以上部分为个人笔记和网络搜索整理,由于学习任务多,加上个人语言组织能力不强,如果有错误请路过的大佬指出,也请见谅!!

以上是关于String StringBuffer StringBuilder的主要内容,如果未能解决你的问题,请参考以下文章

String,StringBuffer与StringBuilder的区别

(转)String,StringBuffer与StringBuilder的区别

重温java中的String,StringBuffer,StringBuilder类

Java常用类--String类(StringBuilder 和 StringBuffer)介绍

StringBuffer和StringBuilder类

StringBuffer的替换功能