Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在Java中使用了一个char变量作为布尔数组的数组索引?如何将字符转换为ASCII值?_Java_Ascii - Fatal编程技术网

我在Java中使用了一个char变量作为布尔数组的数组索引?如何将字符转换为ASCII值?

我在Java中使用了一个char变量作为布尔数组的数组索引?如何将字符转换为ASCII值?,java,ascii,Java,Ascii,下面的代码检查是否存在重复字符 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

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

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. 
    }
String s=“Bengaluru”;
布尔[]字符=新布尔[128];

对于(int i=0;iJava使用16位UNICODE码点*表示
char
s。没有转换为ASCII码-只是最初的128个码点恰好表示与相应ASCII值相同的字符

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


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

完整的答案比dasblinkenlight所建议的要复杂得多

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


方法
charAt
codePointAt
的内部工作方式是特定于实现的。通常错误地认为
String
只是
char
s数组的包装器,但是String类的内部实现不受语言或API规范的约束在ava 6中,Oracle VM一直在使用不同的优化策略来节省内存,并且并不总是使用普通的
char
数组。

Java支持自动扩展原语转换


字符到int、long、float或double

没有转换,字符是数字。自从13年前Java 5发布以来,这一直是错误的。@jarnbjo我为此添加了一个脚注,谢谢。不过,它对答案的要点没有任何影响,因为OP的主要困惑在于
char
s fo的适用性r索引数组。因此,基点是,当字符用作数组索引时,它会自动转换为int,这就是它间接表示字符ASCII值的方式。我的理解正确吗?@ChethanSwaroop是的,假设您将ASCII用作类似“Kleenex”。请停止。这样说更准确一般来说是“字符代码”,或者是“UTF-16代码单元”。并且,正如答案所解释的,
char
并不总是完整的代码点或“字符”(例如,