深入了解Java核心类库--String类

目录

  • 一、 简介
    • 零碎知识点
    • 字符串常量池
    • 堆在逻辑上的划分
  • 二、 创建对象
    • 2.1.1 直接引用常量区
    • 2.1.2 使用构造方法
    • 2.1.3 两种实例化方法的区别
  • 三、常用方法
    • 总结

      一、 简介
      零碎知识点
      • extends Object
        • implements serializable,Comparable< String >,charSequence
      • String类表示字符串,所有字符串文字都是此类的对象
      • 字符串是不变的,值在创建后无法更改
      • 对象一旦声明则不可改变,改变的只是地址,原来的字符串还是存在的,并且产生垃圾
      • 任何一个“”都为字符串对象,无赋值则为匿名对象
      • 用“+”拼接字符串尽量避免,一般用append+toString
      • StringBuilder(线程不安全)和StringBuffer(线程安全),忽略线程安全,其它都一样
      由于String对象是不可变的,所以可以共享(即两个字符串一样则共享同一块内存地址)
      //共享String t1 = "123"; String t2 = "123"; System.out.ptintln(t1 == t2); //true,(== 比较的是内存地址)


      字符串常量池
      存在于方法区(加载代码的内存区),被所有的线程共享

      堆在逻辑上的划分
      堆在逻辑上被分为三部分:
      新生代:存储刚创建的对象(GC询问次数最多为15次,>15则进入老年代)
      老年代:垃圾回收次数超过15次(即15次之后依然存活的对象)
      永久代:静态修饰的所有东西(类、方法、常量…)
      每一个字符串对象的创建都会放入永久代(每次创建都先去永久代,前提:不用new,new开辟新内存)

      二、 创建对象
      2.1.1 直接引用常量区
      String s = " ";
      String str = “abc” ;


      2.1.2 使用构造方法
      String()
      String str = new String(“abc”);


      2.1.3 两种实例化方法的区别
      区别
      直接赋值:
      只开辟一块堆内存空间,并且会自动入池,不会产生垃圾会将匿名对象“”放入对象池,下一次不同对象直接赋值时直接利用池中已经存在的匿名对象
      构造方法:
      在堆内存创建对象会开辟两块堆内存空间,其中一块堆内存会变成垃圾被系统回收,而且不能够自动入池,需要通过public String intern(); 方法进行手工入池。

      三、常用方法
      Modifier and Type Method Description
      char charAt?(int index) 返回指定索引处的 char值。
      int compareTo?(String anotherString) 按字典顺序比较两个字符串。
      boolean endsWith?(String suffix) 测试此字符串是否以指定的后缀结尾。
      boolean equals?(Object anObject) 将此字符串与指定的对象进行比较。
      boolean equalsIgnoreCase?(String anotherString) 将此 String与另一个 String比较,忽略了大小写。
      void getChars?(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将此字符串中的字符复制到目标字符数组中。
      int indexOf?(int ch) 返回指定字符第一次出现的字符串中的索引。
      int indexOf?(int ch, int fromIndex) 返回指定字符第一次出现的此字符串中的索引,从指定索引处开始搜索。
      int indexOf?(String str) 返回指定子字符串第一次出现的字符串中的索引。
      int indexOf?(String str, int fromIndex) 从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。
      boolean isEmpty() 返回 true ,当且仅当, length()是 0 。
      int lastIndexOf?(int ch) 返回指定字符最后一次出现的字符串中的索引。
      int lastIndexOf?(int ch, int fromIndex) 返回指定字符最后一次出现的字符串中的索引,从指定的索引开始向后搜索。
      int lastIndexOf?(String str) 返回指定子字符串最后一次出现的字符串中的索引。
      int lastIndexOf?(String str, int fromIndex) 返回指定子字符串最后一次出现的字符串中的索引,从指定索引开始向后搜索。
      int length() 返回此字符串的长度。
      String repeat?(int count) 返回一个字符串,其值为此字符串的串联重复 count次。
      String replace?(CharSequence target, CharSequence replacement) 将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。
      String replaceAll?(String regex, String replacement) 将给定替换的给定 regular expression匹配的此字符串的每个子字符串替换。
      String replaceFirst?(String regex, String replacement) 将给定替换的给定 regular expression匹配的此字符串的第一个子字符串替换。
      boolean startsWith?(String prefix) 测试此字符串是否以指定的前缀开头。
      boolean startsWith?(String prefix, int toffset) 测试从指定索引开始的此字符串的子字符串是否以指定的前缀开头。
      String stripLeading() 返回一个字符串,其值为此字符串,并删除了所有前导 white space 。
      String stripTrailing() 返回一个字符串,其值为此字符串,并删除所有尾随 white space 。
      CharSequence subSequence?(int beginIndex, int endIndex) 返回作为此序列的子序列的字符序列。
      String substring?(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串。
      String substring?(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。
      char[] toCharArray() 将此字符串转换为新的字符数组。
      String toLowerCase() 使用默认语言环境的规则将此 String所有字符转换为小写。
      String toUpperCase() 使用默认语言环境的规则将此 String所有字符转换为大写。
      String toUpperCase?(Locale locale) 使用给定 Locale的规则将此 String所有字符转换为大写。
      static String valueOf?(T i) 返回T参数的字符串表示形式。
      【深入了解Java核心类库--String类】
      总结 本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

        推荐阅读