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 对象指向的引用,app

“  ”:String 在编程的过程当中常常使用,因此容许它直接赋值就和基本数据同样(但它并非基本数据类型)学习

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

public String()ui

  { this.value = "".value; }this

在字符串中直接赋值的时候会有一个先放到字符串池中,直接赋值的时候会在先在字符串池中查找,若是存在,那么直接将引用复制到对象,不然新建一个对象;能够节约内存空间,提升效率spa

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

常见的方法:

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

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

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

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

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

         regionMatches() ——对字符串中的部份内容是否相同进行比较(详情请参考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来建立对象,对字符串的追加删除修改都比较灵活,

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

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

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

StringBuilder

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

 

三者区别

String

StringBuffer

StringBuilder

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

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

可变类,速度更快

不可变

可变

可变

 

线程安全

线程不安全

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

 

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

 

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

相关文章
相关标签/搜索