42 条回复  ·  4481 次点击
codehz 初学 2025-2-9 15:24:13
稍微偏个题 其实你 c 语言里也可以这么写,而且有实际用处(不过一般不是中文,而是四个英文字母组成的字面量,类似 enum State { stop = 'stop' }这样的用法,然后就可以在内存里见到这个字面量了,简易调试的时候很有用(不过有字节序的问题,所以现在也不常用)
w568w 小成 2025-2-9 15:27:45
@w568w #29 手快发出去了。 再太长不看:char 就是 16 位整数,所以有的字符你无法赋值给 char 。int 则用于代表任意一个 Unicode 字符。Java 在 char[] 和 String 中储存字符串的方式是 UTF-16 编码。
cpstar 小成 2025-2-9 15:40:51
你们不看字节码么? 这句代码经过编译器之后,就变成了 sipush 20320 ,管你是“你”还是什么,一律按照数字处理的,同理还有 boolean 只有 0 和 1 ,进行比较的时候其实就是判断等于 0 与否。本质都是一个数字,甚至观察 String 的本质,也是一堆 char ,一堆数字。
sagaxu 初学 2025-2-9 15:48:30
@w568w Java 9 之后 String 内部用 byte[],编码有 LATIN1 和 UTF-16 两种
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.
sagaxu 初学 2025-2-9 15:55:48
@w568w https://openjdk.org/jeps/254
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 兼容和大小端的问题
zhouyin 楼主 小成 2025-2-9 16:09:59
@cpstar 这个帖子的初忠是 当前编辑器编码 utf8 输入汉字'你'时 输入了三个字节 E4BDA0 java 编译器隐士地把 utf8 字符字面量转成 utf16 4F60 等于十进制 20320
zhouyin 楼主 小成 2025-2-9 16:11:06
@codehz 大佬 能不能发个具体能利用这样 enum 调试 c 的例子 不是 c 高手
LanhuaMa 小成 2025-2-9 16:14:33
@theoriz #2 你有病,有病要去治,不治迟早会出事。
返回顶部