java 字符串

为什么 string 是不可变字符串

  1. String 类是一个 final 类,并且没有提供修改字符串中某个字符的方法,所以 java 文档中将 String 类对象称为是不可变的。

  2. String 类继承自 Object 类,并重写了 hashcode 方法,String 对象可变的话就违反 了 hashcode 的约定

// 把字符串“hello”改为“helon”,不能直接修改最后两个位置的字符
String a = "hello"
// 可以使用substring方法提取和拼接
a = substring(0,3) + "on"

通过截取和拼接字符串效率确实不高,但不可变字符串有一个优点:编译器可以让字符串共 享: 各种字符串存储在公共的存储池中,字符串变量指向存储池中相应字符串的位置,复制一个 字符串本质上是:原始变量和复制变量指向的是存储池中共享的同一个字符串。 不可变还带来了线程安全和存储安全的优点。

StringBuilder 和 StringBuffer

StringBuilder:线程不安全,但速度快 StringBuffer: 线程安全,但速度慢

字符串与编码

什么是字符集(character set)

  • 字符集:各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。是真 实世界文字和对应文字在计算机中存储的一一映射。

  • 常见字符集:ASCII 字符集、GB2312 字符集、BIG5 字符集、 GB18030 字符集、Unicode 字符集等。

字符
计算机编码值

U+725B

0

U+0030

A

U+0041

 System.out.println("\u0041");

什么是字符转换格式(编码格式)

  • 字符在计算机世界里,需要被传输和存储等,字符转换格式规定了字符怎么被传输和存储 。

  • 常见字符转换格式:

    1. UTF-8:一种变长的 Unicode 字符编码转换格式。UTF 全称 Unicode Transformation Format

    2. UTF-16:只要不处理大于\U200000 范围的字符,每个 Unicode 代码点使用 16 位即 2 字节表示,超出部分使用两个 UTF-16 即 4 字节表示。

Last updated

Was this helpful?