2021-07-23

String

String类代表的是字符串,java程序中所有使用双引号引起来的都是字符串。

String类位于java.lang包下,凡是位于java.lang包下的类,在使用的时候,不需要导包。java中的所有的字符串都被实现为String类的实例。java程序中所有使用双引号引起来的字符串,都是String类的对象。

String字符串的特点

  1. 字符串不可改变,他的值在创建之后就不能被更改
  2. String的值不可变,但是可以被共享
  3. 字符串的效果相当于字符数组(char[]),但底层 原理却是字节数组(byte[])

String类的构造方法

  1. String() 初始化新创建的String对象,使其表示空字符序列
  2. String(char[] value)分配一个新的String,以便他表示当前包含在字符数组参数中的字符序列
  3. String(byte[] value)通过使用平台的默认字符集解码指定的字节数组来构造新的String
  4. String s=“abc”;直接赋值的方式创建字符串abc

创建字符串对象的俩种方式

  1. 通过构造方法创建
    使用new创建字符串对象,每一次new都会创建一个内存空间,虽然内容都是相同的,但是地址不同
    在这里插入图片描述
  2. 直接赋值的方式创建
    使用"asasn"给出的字符串,只要字符串序列相同(顺序和大小写)无论在代码中出现了几次,jvm都只会建立一个String对象,并在字符串常量池中维护

字符串的比较

  1. 物理地址的比较:==比较的是俩个字符串的地址是否相同
  2. 字符串内容的比较:
    boolean equals(Object anObject) 将字符串与指定的对象比较,必须内容完全一致,区分大小写
    boolean equalsIgnoreCase(String anotherString)将此String与其他String比较,忽略大小写的

String类的常用方法

  • charcharAt(int index) 返回 char指定索引处的值。
  • Stringconcat(String str) 将指定的字符串连接到该字符串的末尾。
  • booleanendsWith(String suffix) 测试此字符串是否以指定的后缀结尾。
  • booleanequals(Object anObject) 将此字符串与指定对象进行比较。
    booleanequalsIgnoreCase(String anotherString) 将此 String与其他 String比较,忽略案例注意事项。
  • byte[]getBytes() 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。
  • intindexOf(int ch) 返回指定字符第一次出现的字符串内的索引。
  • intindexOf(int ch, int fromIndex) 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。
  • intindexOf(String str) 返回指定子字符串第一次出现的字符串内的索引。
  • intindexOf(String str, int fromIndex) 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。
  • Stringintern() 返回字符串对象的规范表示。
  • booleanisEmpty() 返回 true如果,且仅当 length()0
  • intlastIndexOf(int ch) 返回指定字符的最后一次出现的字符串中的索引。
    intlastIndexOf(int ch, int fromIndex) 返回指定字符的最后一次出现的字符串中的索引,从指定的索引开始向后搜索。
    intlastIndexOf(String str) 返回指定子字符串最后一次出现的字符串中的索引。
    intlastIndexOf(String str, int fromIndex) 返回指定子字符串的最后一次出现的字符串中的索引,从指定索引开始向后搜索。
    intlength() 返回此字符串的长度。
  • Stringreplace(char oldChar, char newChar) 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar
    • booleanstartsWith(String prefix) 测试此字符串是否以指定的前缀开头。
    • char[]toCharArray() 将此字符串转换为新的字符数组。
      StringtoLowerCase() 将所有在此字符 String使用默认语言环境的规则,以小写。
    • StringtoUpperCase() 将所有在此字符 String使用默认语言环境的规则大写。
    • Stringsubstring(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串。
    • Stringsubstring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。
    • static StringvalueOf(boolean b) 返回 boolean参数的字符串 boolean形式。
      static StringvalueOf(char c) 返回 char参数的字符串 char形式。
      static StringvalueOf(char[] data) 返回 char数组参数的字符串 char形式。
      static StringvalueOf(char[] data, int offset, int count) 返回 char数组参数的特定子阵列的字符串 char形式。
      static StringvalueOf(double d) 返回 double参数的字符串 double形式。
      static StringvalueOf(float f) 返回 float参数的字符串 float形式。
      static StringvalueOf(int i) 返回 int参数的字符串 int形式。
      static StringvalueOf(long l) 返回 long参数的字符串 long形式。
      static StringvalueOf(Object obj) 返回 Object参数的字符串 Object形式。

String的常见陷阱

String str1="abc";//字符串常量  存储在字符串常量池中 是共享的
String str2=new String("abc");//字符串非常量对象 存储在堆中

在这里插入图片描述

  1. 常量与常量的拼接,结果在常量池,且常量池中不会存在相同内容的常量
  2. 只要其中有一个是变量,其结果就在堆中
  3. 如果拼接的结果调用inter(),结果就在常量池中

StringBuilder

一个可变的字符序列;但不保证同步
可以将StringBuilder看成是一个容器,这里的可变指的是StringBuilder对象的内容是可变的。

String和StringBuilder的区别

String:内容不可变
StringBuilder:内容可变

StringBuilder构造方法

  1. StringBuilder()构造一个没有字符的字符串构建器,初始容量为16 StringBuilder(int capacity)

  2. 构造一个没有字符的字符串构建器,由capacity参数指定的初始容量

  3. StringBuilder(String str)构造一个初始化为指定字符串内容的字符串构建器

StringBuilder的常用方法

  • StringBuilderappend(int i)int参数的字符串表示法附加到此序列。
    StringBuilderappend(long lng)long参数的字符串表示法附加到此序列。
    StringBuilderappend(Object obj) 追加 Object参数的字符串 Object形式。
    StringBuilderappend(String str) 将指定的字符串附加到此字符序列。
  • StringBuilderinsert(int offset, String str) 将字符串插入到此字符序列中。
    intlastIndexOf(String str) 返回指定子字符串最右边出现的字符串内的索引。
    intlastIndexOf(String str, int fromIndex) 返回指定子字符串最后一次出现的字符串中的索引。
  • intlength() 返回长度(字符数)。
  • StringBuilderreverse() 导致该字符序列被序列的相反代替。
  • voidsetCharAt(int index, char ch) 指定索引处的字符设置为 ch
  • Stringsubstring(int start) 返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。
    Stringsubstring(int start, int end) 返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。
    StringtoString() 返回表示此顺序中的数据的字符串。
    voidtrimToSize() 尝试减少用于字符序列的存储。

实现一个将String和Stringbuilder两个对象之间的相互转换

  1. 将StringBuilder 转换为String

String toString() 返回表示此顺序中的数据的字符串。

  1. 将String转换为StringBuilder

StringBuilder(String str) 构造一个初始化为指定字符串内容的字符串构建器。

StringBuilder和String的使用场景

  1. 如果只是单纯的使用到一个字符串,则直接使用String

  2. 如果字符串的内容是需要动态改变(动态拼接)则是用Stringbuilder

StringBuffer 和Stringbuilder的区别

  1. Stringbuffer 线程同步的 线程安全的
  2. Stringbuilder线程不同步 线程不安全的

​ 在一般情况下 使用StringBuilder ,在多线程环境下 进行字符串的拼接操作 此时就需要考虑使用StringBuffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值