Skip to the content.

首页

version: jdk17


Object


String

字符存储

private final byte[] value;
private final byte coder; // 字符编码方式,0: Latin1,1: UTF-16BE。
static final boolean COMPACT_STRINGS; // 是否压缩字符,默认true。

JDK9开始支持字符压缩,即如果字符全部在Latin1能表示的范围内会使用Latin1编码,否则使用UTF-16BE编码(之前的编码方式),并使用byte[]存储字符(之前使用char[]),Latin1编码的操作类为StringLatin1,UTF-16BE编码的操作类为StringUTF16(使用getChar方法将两个连续的byte值读取为一个char值)。

字符编码

构造方法

只有通过”“创建的字符串才会被加入字符串常量池中,而new出来的String对象会存放在堆中。

实例方法

字符串拼接优化

  1. 如果是字符串常量拼接,会被合并为一个长字符串,属于常量折叠优化
  2. 如果是字符串对象拼接,会创建一个StringBuilder对象进行拼接。

可变字符串

abstract class AbstractStringBuilder implements Appendable, CharSequence

StringBuilder和StringBuffer的基类,内部实现与String基本相同。

StringBuffer

线程安全,默认容量16,所有方法全是直接调用父类方法,但都加上了同步,同时toString方法有缓存(使用toStringCache属性)。

StringBuilder

非线程安全,默认容量16,所有方法全是直接调用父类方法。

要点

  1. 除了delete之外的其他变更操作都会尝试压缩字符串(inflate方法);
  2. append和insert操作如果对象参数为null,则会视作”null”;
  3. 不存在char参数的构造方法,你可以这么写但实际上执行的构造方法是AbstractStringBuilder(int capacity);

包装类


大数

均为不可变对象,每次变更操作都会返回新对象。

BigInteger

MathContext

BigDecimal

实现及构造

方法


abstract class ClassLoader


运行时类

System

系统工具类

Runtime

JVM的运行时环境类,为饿汉式单例模式。

public abstract class Process

可通过ProcessBuilder.start()和Runtime.exec()创建一个本机进程,包含一个输入流、一个输出流以及一个错误流。