Java 为什么能给 char 类型赋值中文字符

zhouyin · 2025-2-9 11:07:46 · 4484 次点击
java 文档里有写 一个 char 由两个自己组成 但一个 utf8 汉字由三个字节组成
为什么这样赋值没事?

char a = '我';
举报· 4484 次点击
登录 注册 站外分享
42 条回复  
user8341 初学 2025-2-9 17:03:20
@user8341 更正: char wo = '\u6211'; System.out.println(wo); // 输出:我
user8341 初学 2025-2-9 17:02:35
为什么很多人说 char 是 utf-16 编码呢? char 存的是 unicode 不是 utf-8 或者 utf-16 。它能存 65536 个基本多文种平面( BMP )的字符,如果超过这个范围(生僻字)就需要两个 char 才能存得下。 char c = '\u0041'; System.out.println(c); // 输出:我
cpstar 小成 2025-2-9 16:57:07
OP 38# 编译器干的不就是这个,读取原始文件,然后进行语法识别和语义识别,判断到给本地变量 a 设置 char ,那就把等号后边的字符(以单引号包住的,前一步语法分析没有问题的)按照文件存储编码或者-encoding 选项进行识别,按数字处理,并根据不同的数字范围来使用不同的指令集,iconst_x bipush sipush ldc 等
LanhuaMa 小成 2025-2-9 16:14:33
@theoriz #2 你有病,有病要去治,不治迟早会出事。
zhouyin 楼主 小成 2025-2-9 16:11:06
@codehz 大佬 能不能发个具体能利用这样 enum 调试 c 的例子 不是 c 高手
zhouyin 楼主 小成 2025-2-9 16:09:59
@cpstar 这个帖子的初忠是 当前编辑器编码 utf8 输入汉字'你'时 输入了三个字节 E4BDA0 java 编译器隐士地把 utf8 字符字面量转成 utf16 4F60 等于十进制 20320
my3157 小成 2025-2-9 16:04:08
大多数语言里面, char 都代表的是 single unicode scalar value, 而 utf8 只是编码规则, 长度是 1-4 bytes(问题中的 '我' 就会编码成 3 个 bytes), 覆盖了 BMP(基本多文种平面), 基本上够 99.99% 的各类用途, 而且 uft8 是兼容 ascii 且大小端无关的, uft16 以以上要考虑 ascii 兼容和大小端的问题
sagaxu 初学 2025-2-9 15:55:48
@w568w https://openjdk.org/jeps/254
w568w 小成 2025-2-9 15:52:39
@sagaxu #33 这我倒没了解过,有来源吗?我的断言是上面文档里的描述: > The Java platform uses the UTF-16 representation in char arrays and in the String and StringBuffer classes.
12345下一页
返回顶部