西维蜀黍

【Java】String - String,StringBuilder 和 StringBuffer

String类

打开 String 类就会发现,它是被 final 修饰的:

  ...


【Java】装箱(Boxing)与拆箱(Unboxing)

背景

基本数据类型

基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型。它们是我们编程中使用最频繁的类型。

Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化。

  ...


【Java】String - String 类和常量池

String 类

概览

String 被声明为 final,因此它不可被继承。

在 Java 8 中,String 内部使用 char 数组存储数据。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
}Copy to clipboardErrorCopied

在 Java 9 之后,String 类的实现改用 byte 数组存储字符串,同时使用 coder 来标识使用了哪种编码。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final byte[] value;

    /** The identifier of the encoding used to encode the bytes in {@code value}. */
    private final byte coder;
}Copy to clipboardErrorCopied

value 数组被声明为 final,这意味着 value 数组初始化之后就不能再引用其它数组。并且 String 内部没有改变 value 数组的方法,因此可以保证 String 不可变。

String 对象的两种创建方式

String str1 = "abcd";
String str2 = new String("abcd");
String str3 = new String("abcd");

System.out.println(str1 == str2); //false
System.out.println(str1 == str3); //false
System.out.println(str2 == str3); //false

这两种不同的创建 String 对象实例的方法是有差别的:

  • 第一种方式是直接指向一个**字符串常量池(String Constant Pool)**中的"abcd"字符串对象的引用;
  • 第二种方式是直接在堆(Heap)内存中创建一个新的对象,而这个对象的 value 指向了"abcd"字符串对象。
  ...


【Java】多线程-Callable、Future 和 FutureTask

背景

我们知道,创建线程类有 2 种方式,一种是直接继承 Thread,另外一种就是实现 Runnable 接口。

这 2 种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。

  ...


【Java】JVM-双亲委派模型(Parents Delegation Model)

双亲委派模型(Parents Delegation Model)

**双亲委派模型(Parents Delegation model)**要求:除了顶层的启动类加载器(BootStrap ClassLoader)外,其余的类加载器都应当有自己的父类加载器。

  ...