繁体   English   中英

我在 Java 中使用 char 变量作为布尔数组的数组索引? 字符到其 ASCII 值的转换是如何发生的?

[英]I used a char variable as Array Index to a Boolean array in Java? How does the conversion of character to its ASCII value happen?

下面的代码检查是否有重复的字符

String s = "Bengaluru";
boolean[] characters = new boolean[128];

    for(int i=0; i<s.length();i++){
        char ch = s.charAt(i);          
        if(characters[ch] == true){
            return;
        }
        else
            characters[ch] = true;//Here true is getting stored in the ASCII value of the character. 
    }

完整的答案比 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数组的包装器,但 String 类的内部实现不受语言或 API 规范的强制要求。 从 Java 6 开始,Oracle VM 一直使用不同的优化策略来节省内存,并不总是使用普通的char数组。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM