• Java基础—char类型数据


    char类型介绍

    char类型原本表示单个字符,但由于Unicode字符集扩充,导致有些字符需要使用两个char来描述
    大小: 一个char类型占两个字节,16位
    范围: 为十进制数 0 ~ 65535(即0 ~ 216-1),Unicode表示\u0000 ~ \uFFFF
    定义方式:

    char a1 = 'A'; // 使用单引号定义一个char
    char a2 = '\u0041'; // unioncode编码定义,与上面定义等价
    char a3 = 65; // 等价运算1 接受8进制、10进制、16进制数字,表示其在Unicode编码中的位置
    
    • 1
    • 2
    • 3

    运算:

    char a1 = 'A' + 1; // 值为 B
    
    • 1

    转义序列:
    除了\u的Unicode字符外,还有一些转义序列可出现在char字面量中(单引号里)

    转移序列名称Unicode值
    \b退格\u0008
    \t制表\u0009
    \n换行\u000a
    \r回车\u000d
    \’单引号\u0022
    \"双引号\u0027
    \\斜杠\u005c
    // 以下三者等价
    char a1 = '\b';
    char a2 = '\u0008';
    char a3 = 0x0008;
    
    • 1
    • 2
    • 3
    • 4

    注意: Unicode转移序列会在解析代码之前转换,使用中须小心
    示例:

    // \u000A is a newline 
    // 会产生一个语法错误,因为编译时\u000A会替换为换行符
    // look inside c:\user
    // 同样报错,因为\u后没有跟16进制数
    
    • 1
    • 2
    • 3
    • 4

    Unicode编码

    Unicode目的是解决各字符集编码方式不统一的问题,当时工程师预估只用2byte的代码宽度即可对世界上所有语言的所有字符进行编码,该工程从20世纪80年代启动,于1991年发布Unicode1.0,仅占用216-1(65536)的一半不到。Java设计时使用16位的char以支持Unicode,此后由于加入大量汉语、日语、韩语的表意文字,导致16位的char已不能满足Unicode的需要。
    名词解释:
    码点(code point): 指一个编码表中一个字符代表的编码值

    在Unicode中码点采用16进制书写,并加前缀 U+,如:U+0041代表拉丁字母A的码点

    代码平面(cod plane)

    Unicode的码点可分为17个代码平面
    第一个代码平面称为_基本多语言平面_(basic multilingual plane),包括码点从U+0000到U+FFFF的“经典”Unicode代码
    其余16个代码平面为从U+10000到U+10FFFF,包括_辅助字符_(supplementary character)

    以下为Java解决Unicode扩容问题的方案:
    UTF-16编码采用不同长度的编码表示所有Unicode码点,在基本多语言平面中,每个字符用16位表示,通常称作_代码单元_(code unit);而辅助字符编码为一对连续的代码单元。采用这种编码对表示的各个值落入基本多语言平面中未用的2048个值范围内,通常称为_替代区域_(surrogate area)(U+D800~U+DBFF为第一个代码单元, U+DC00~U+DFFF为第二个代码单元)。如此设计,我们可以迅速判断一个代码单元是一个字符的编码,还是一个辅助字符的第一或第二部分。
    关于编码的算法详见(https://tools.ietf.org/html/rfc2781
    注意: 强烈建议不要在Java中使用char类型,除非确实需要处理UTF-16代码单元

  • 相关阅读:
    Remmina Linux 远程桌面(堡垒机)解决方案,含文件互传
    【Python+Selenium学习系列4】Selenium常用的方法
    set和map通过一颗红黑树进行封装
    MQ系列7:消息通信,追求极致性能
    灭弧式智慧用电在养老机构的应用
    关于埋点上报
    【质量】代码质量评价标准
    通过Oracle Enterprise Manager管理OCI上的RAC
    2023 收入最高的十大编程语言
    美信监控易:网络管理之链路专线管理
  • 原文地址:https://blog.csdn.net/u012604299/article/details/126810849