public class Game {
    public static void main(String[ \u005d args) {
        // C:\user
        System.out.println("\u2713");
    }
}

不出所料, 这段代码会报错.

但是出人意料的是报错信息: Error:(3, 16) java: illegal unicode escape .

如果把注释的这行删掉, 是可以运行并打印一个字符: .

Unicode 转义序列会在解析代码之前得到处理.

Unicode的”码位”与”代码单元”

在Ruby中, String#length 得到的是字符串的字符个数, 不需要关心底层字符串怎么实现, 不用关心是普通字符还是辅助字符, 得到的字符个数就是我们所看到的字符个数, 一个Emoji就算一个字符.

puts "中👍文".length
# => 3

但是Java中会稍微复杂一点, 或者说底层一些, String#int 得到的是 Unicode 的代码单元的个数.

public class Main {
    public static void main(String[] args) {
        System.out.println("中👍文".length());
    }
}
// => 4

要是想得到视觉所见的字符个数, 应该使用码位来数:

public class Game {
    public static void main(String[] args) {
        String str = "中👍文";
        System.out.println(str.codePointCount(0, str.length()));
    }
}
// => 3