Java学习心得_代码单元与代码点的个人见解

前言

最近开始了《Java核心基础:卷一》的阅读,读到了代码点这一知识点有点懵,于是开始网上搜各种帖子,然后记录下自己的理解

代码

    public class Test2 {
        public static void main(String[] args) {
            String s = "\uD835\uDD6B";//𝕫占用两个字符,length=2
            //String s1 = "\uD835";//?占用一个字符,length=1
            //String s2 = "\uDD6B";//?占用一个字符,length=1
            //String s = "中";//中占用一个字符,length=1
            System.out.println(s);
            System.out.println(s.length());//2
            System.out.println(s.codePointCount(0,s.length()));//1
        }
    }

解释

一个char字符占用两个字节,一共8位(bit),一共有65535个字符

常见文字用一个char存储,占用一个字符/两个字节,高八位低八位都用
常见英文字用一个char存储,占用一个字符/两个字节,但是只占用低八位

但是世界上这么多文字/符号,单纯的一个字符(65535)肯定是装不下的
这就意味着有些文字和特殊符号,需要用两个甚至多个字符表示
此时就用引入了代码点和代码单元
    
一个字符为一个代码单元CodeUnit
我们能识别的文字符号都是有对应的代码点CodePoint的。

一个代码单元构成的代码点是基本字符的编码,如:z,中
多个代码单元构成的代码点是辅助字符的编码,如:𝕫

只打印辅助字符的单个字符会出现乱码
只打印文字的单个字节也会乱码
IO流中有每次读写一个字节的方法,当读取到一个字节马上打印输出这个字节
文本文件就会乱码。英文则不会乱码)

所以,所有的文字和符号在底层都是由代码单元CodeUnit存储的(最底层是字节,也就是0和1)
但是计算机可以通过特定的规则(各种编码表)识别出代码点(无论是一个代码单元构成还是多个代码单元构成)
进而表示出我们能识别的文字和符号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值