保存成功
订阅成功
保存失败,请重试
提交成功
预订中

从底层重学 Java 之 String 字符串

¥4.99会员免费看
草宝虫
5

从底层,从原理,我们来重学一次 Java。String 是字符串类,包含比特流与字符串的互转,字符串的常用切割、定位、相等判断,他的源码及实现是怎样的呢?

本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。

本篇 Chat 对 String 的属性、构造函数、常用字符串处理进行逐一源码分析,帮助大家深入理解和学习 JDK 源码的牛掰优化。

本文包含以下内容:

  • 类信息
    • 类的定义
    • 类的继承结构
  • 局部变量
    • value
    • hash
  • 构造函数
    • String()
    • String(String original)
    • String(StringBuffer buffer)
    • String(StringBuilder builder)
    • String(char value[])
    • String(char[] value, boolean share)
    • String(char value[], int offset, int count)
    • String(int[] codePoints, int offset, int count)
      • Character.isBmpCodePoint(int codePoint)
      • Character.isValidCodePoint(int codePoint)
      • Character.toSurrogates(int codePoint, char[] dst, int index)
      • Character.highSurrogate(int codePoint)
      • Character.lowSurrogate(int codePoint)
    • String(byte bytes[], int offset, int length, String charsetName)
      • checkBounds(byte[] bytes, int offset, int length)
      • StringCoding.decode(String charsetName, byte[] ba, int off, int len)
      • StringCoding.deref(ThreadLocal<SoftReference<T>> tl)
      • StringCoding.lookupCharset(String csn)
      • StringCoding.StringDecoder
      • StringCoding.set(ThreadLocal<SoftReference<T>> tl, T ob)
  • CharSequence
    • 接口定义
    • length()
    • charAt(int index)
    • subSequence(int start, int end)
    • toString()
    • chars()
    • codePoints()
  • length()
  • isEmpty()
  • charAt(int index)
  • getBytes(String charsetName)
  • getBytes(Charset charset)
  • getBytes()
    • StringCoding.encode(char[] ca, int off, int len)
    • System.exit(int status)
    • StringCoding.encode(String charsetName, char[] ca, int off, int len)
    • StringCoding.deref
    • StringCoding.set
    • StringCoding.lookupCharset(String csn)
    • StringCoding.set(ThreadLocal tl, T ob)
    • StringCoding.StringEncoder
    • StringCoding.safeTrim(byte[] ba, int len, Charset cs, boolean isTrusted)
    • Arrays.copyOf(byte[] original, int newLength)
    • CharsetEncoder.encode(CharBuffer in, ByteBuffer out, boolean endOfInput)
    • CharsetEncoder.flush(ByteBuffer out)
  • equals(Object anObject)
    • 为什么“==”不行呢?
  • contentEquals(StringBuffer sb)
  • contentEquals(CharSequence cs)
  • equalsIgnoreCase(String anotherString)
  • regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
  • regionMatches(int toffset, String other, int ooffset, int len)
  • compareTo(String anotherString)
  • CASEINSENSITIVEORDER
  • compareToIgnoreCase(String str)
  • startsWith(String prefix, int toffset)
  • startsWith(String prefix)
  • endsWith(String suffix)
  • hashCode()
  • indexOf(int ch)
  • indexOf(int ch, int fromIndex)
  • lastIndexOf(int ch)
  • lastIndexOf(int ch, int fromIndex)
  • indexOf(String str)
  • indexOf(String str, int fromIndex)
  • indexOf(char[] source, int sourceOffset, int sourceCount, String target, int fromIndex)
  • indexOf(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex)
  • lastIndexOf(String str)
  • lastIndexOf(String str, int fromIndex)
  • lastIndexOf(char[] source, int sourceOffset, int sourceCount, String target, int fromIndex)
  • lastIndexOf(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex)
  • substring(int beginIndex)
  • substring(int beginIndex, int endIndex)
  • subSequence(int beginIndex, int endIndex)
  • concat(String str)
    • getChars(char dst[], int dstBegin)
  • replace(char oldChar, char newChar)
  • matches(String regex)
  • contains(CharSequence s)
  • replaceFirst(String regex, String replacement)
  • replaceAll(String regex, String replacement)
  • replace(CharSequence target, CharSequence replacement)
  • split(String regex, int limit)
  • split(String regex)
  • join(CharSequence delimiter, CharSequence… elements)
  • join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
  • StringJoiner
    • StringJoiner(CharSequence delimiter)
    • StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
    • setEmptyValue(CharSequence emptyValue)
    • toString()
    • add(CharSequence newElement)
    • merge(StringJoiner other)
    • prepareBuilder()
    • length()
  • toLowerCase(Locale locale)
  • toLowerCase()
  • ConditionalSpecialCasing
    • toLowerCaseEx(String src, int index, Locale locale)
    • toUpperCaseEx(String src, int index, Locale locale)
    • toLowerCaseCharArray(String src, int index, Locale locale)
    • toUpperCaseCharArray(String src, int index, Locale locale)
    • lookUpTable(String src, int index, Locale locale, boolean bLowerCasing)
    • Entry
    • entry
    • entryTable
  • toUpperCase(Locale locale)
  • toUpperCase()
  • trim()
  • toString()
  • toCharArray()
  • format(String format, Object… args)
  • format(Locale l, String format, Object… args)
  • valueOf
  • valueOf(char data[])
  • valueOf(char data[], int offset, int count)
  • copyValueOf(char data[], int offset, int count)
  • copyValueOf(char data[])
  • valueOf(boolean b)
  • valueOf(char c)
  • valueOf(int i)
  • valueOf(long l)
  • valueOf(float f)
  • valueOf(double d)
  • intern()

适用人群:有一些 Java 基础的人群。

预订截止倒计时 -110
详情
07-22之前
9 人已预订
40 预订成功
300 群答疑
会员免费预订
¥4.99 原价预订
订阅须知

预订后,您将在 08月10日 之前获得一篇专享文章。

请务必 关注 GitChat 服务号 以查看活动进度及获取活动通知。

届时文章未达标,款项将退回到微信账户。

关注提示×
扫码关注公众号,获得 Chat 最新进展通知!
入群与作者交流×
扫码后回复关键字 入群
Chat·作者交流群
入群码
该二维码永久有效
严选标准
知道了
Chat 状态详情
开始预订
预订结果公布08月10日

预订达标,作者开始写作

审核未达标,本场 Chat 终止

作者文章审核结果公布08月10日

审核达标,文章发布

审核未达标,本场 Chat 终止

微信群答疑

加小助手微信,入群与作者答疑

答疑内容发布

微信群交流内容整理

Chat 完结
×
已购列表