为什么从0x0000到0xFFFF的某个int不是定义的unicode字符

Har*_*hen 6 java unicode

从我的Java文档读取字符,即

从U + 0000到U + FFFF的字符集有时被称为基本多语言平面(BMP)

但我尝试了下面的代码,发现有2492 int未定义!有什么不对的吗?或者我有一些误解?谢谢!

public static void main( String[] args )
{
    int count=0;
    for(int i = 0x0000; i<0xFFFF;i++)
    {
        if(!Character.isDefined(i))
        {
            count++;
        }
    }
    System.out.println(count);
}
Run Code Online (Sandbox Code Playgroud)

输出:

2492

一二三*_*一二三 4

文档指出,如果字符在isDefined()UnicodeData 文件中具有条目或位于某个范围内,则该字符“已定义” 。这标识了已分配给字符的代码点集(并且可能更好地命名为isAssigned())。正如您所发现的,基本多语言平面中的所有代码点尚未分配给字符(此地图显示了一些空白的位置)。

但是,即使代码点尚未分配(即isDefined()false,它也可能在 Unicode 的未来版本中分配,并且仍然是有效的代码点。编码/解码和使用未分配的代码点是完全有效的(尽管有点奇怪)。