从底层重学 Java 之 String 字符串
从底层,从原理,我们来重学一次 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)
- CASE_INSENSITIVE_ORDER
- 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 基础的人群。
草宝虫 · 架构师