阅读java源码--String

本文章源码来源JDK1.8

目录

实现方式

构造方法

空构造 "".value

String 为参数

char[] 为参数

字符的UNicode编码数组(int[])

byte[] 不常用

StringBuffer为参数

StringBuilder为参数

内部构造

主要方法

length()

isEmpty()

charAt(int index)

equals(Object anObject) !!!

compareTo(String anotherString)

compareToIgnoreCase(String str)

hashCode()

indexOf

lastIndexOf(int ch)

substring

concat(String str)

replace(char oldChar, char newChar)

contains

split(String regex)

join

toUpper/toLower

trim()

toCharArray()

valueOf



阅读java源码--String

  1. 实现方式

    1. char数组阅读java源码--String
  2. 构造方法

    1. 空构造 "".value

      阅读java源码--String
    2. String 为参数

      阅读java源码--String
    3. char[] 为参数

      阅读java源码--String
      1. 其中char[]有带偏移量的方法阅读java源码--String
    4. 字符的UNicode编码数组(int[])

    5. byte[] 不常用

    6. StringBuffer为参数

      阅读java源码--String
    7. StringBuilder为参数

      阅读java源码--String
      1. 此两种方式常常被忽视,但是实际存在
    8. 内部构造

      阅读java源码--String
      1. 此方法只在String内部使用,提高复制数组效率,直接赋值
  3. 主要方法

    1. length()

      1. 返回char数组的长度阅读java源码--String
    2. isEmpty()

      1. 返回char数组是否为空阅读java源码--String
    3. charAt(int index)

      1. 判断index是否合法,合法则返回char数组索引所在位置(value[index])
      2. 阅读java源码--String
    4. equals(Object anObject) !!!

      1. 判断是否同一对象,是则返回true
      2. 如果对象不属于String类型直接返回false(instanceof)
      3. 遍历两个字符串的char数组,如发现字符串不相等时,返回false阅读java源码--String
      4. ps:非常重要的方法,不仅是对代码思路有所帮助,同时也是面试重点
    5. compareTo(String anotherString)

      1. 选择两个字符串中长度较短的为限制,遍历
      2. 如果有字符不相等,就返回差值
      3. 遍历完成未返回,返回两个字符串的长度之差阅读java源码--String
    6. compareToIgnoreCase(String str)

      1. 同5,忽略大小写后字符串比较
    7. hashCode()

      1. 有缓存机制,只计算一次
      2. 字符串的每一个字符参与计算,公式为s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]阅读java源码--String
    8. indexOf

      1. 返回该字符第一次出现的索引(从0开始计数) ps:该参数为字符的整数值
      2. 该参数可为String
    9. lastIndexOf(int ch)

      1. 返回该字符最后一次出现的索引,同8
    10. substring

      1. 截取字符串,如果截取的长度等符合规则,则调用char[]为参数的构造函数创建新的对象阅读java源码--String
    11. concat(String str)

      1. 将新串接到末尾,如果是空串则返回本身,否则创建新字符串阅读java源码--String
    12. replace(char oldChar, char newChar)

      1. 替换原字符串中所有的oldChar变为newChar,相等时不操作
      2. 找到第一次出现oldChar的位置i
      3. 新建一个新char数组, 将i前所有字符copy进新数组,i后字符如果是old则替换成new,之后生成新字符串阅读java源码--String
    13. contains

      1. 调用方法indexOf判断是否在字符串中阅读java源码--String
    14. split(String regex)

      1. 将字符串分割返回字符串数组
    15. join

      1. 一个静态方法,将字符串数组转成字符串
    16. toUpper/toLower

      1. 转化大小写
    17. trim()

      1. 去除字符串两端空格
      2. 两个指针,从字符串两端逼近,如果指针所在位置为空格则移动指针
      3. 根据两个指针的位置生成字符串阅读java源码--String
    18. toCharArray()

      1. 返回字符数组
    19. valueOf

      1. 参数为对象或者char[]或者基本数据类型
      2. 对象时 空对象返回“null” ,否则返回对象的toString方法,此处一定注意空对象变成“null”而不是“”或者null
      3. char[]调用char[]的构造函数
      4. 基本型返回对应封装类的toString