有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    完整的答案比dasblinkenlight所暗示的要复杂得多

    自Java 5以来,数据类型char不再表示字符或Unicode码点,而是表示UTF-16编码值,它可能是完整字符或字符的一小部分。这个UTF-16值实际上只是一个介于0到65535之间的16位无符号整数,当用作数组索引时,它将自动转换为int,就像short或byte等其他数字数据类型一样。如果确实希望Unicode码点作为字符,则应使用方法codePointAt(int index)而不是charAt(int index)。Unicode代码点可以在0到1114111(0x10ffff)之间

    方法charAtcodePointAt方法的内部工作方式是特定于实现的。人们常常错误地认为String只是char数组的包装器,但该语言或API规范并不强制要求字符串类的内部实现。自Java6以来,Oracle VM一直在使用不同的优化策略来节省内存,并且并不总是使用普通的char数组

  2. # 2 楼答案

    Java使用16位UNICODE代码点表示char。没有发生到ASCII的转换-只是初始128个代码点恰好表示与相应ASCII值相同的字符

    Java确实执行了charint的转换,以使索引成为可能。这是一个隐式发生的内置转换,因为它是加宽。换句话说,可以存储在char中的任何值都可以在int中表示,而不会丢失

    *Java-5切换到UTF-16表示,将一些数字的解释更改为“部分字符”char仍然是16位无符号数