为什么我们允许将char赋给java中的int?
可能重复:
Java中的char和int
AsicII表: http : //www.asciitable.com
下面的代码打印出相应字符的Dec值,例如“123” – > 49 50 51
public void foo(String str) { for(int x = 0; x < str.length(); x++) { int temp = str.charAt(x); System.out.println(temp); } }
但我注意到java是一种强类型语言,这意味着每一件事都必须在编译时进行转换,但是为什么代码知道如何以及何时将char转换为AsicII表中正确的Dec值? 我搞乱了任何java /编程基础吗?
char
只是一个无符号的16位数,所以因为它基本上是int
类型的一个子集,所以JVM可以没有任何歧义地进行转换。
char具有双重个性。
它是一个16位无符号整数数字类型,它使int赋值给一个非常自然的操作,涉及扩展原始转换,如果需要,编译器将插入的转换之一,而不需要显式转换。
它也是表示I / O和String操作的字符的方式。
Java是用C语言编写的,C:chars的一个特性也代表了一个数字
但是,作为标量类型,有一个问题: – 打印一个字符将产生ascii字符 – 打印一个int将产生数字
还有一些关于upcast和downcast的细节(要转换为char的int,需要明确地完成,因为涉及一些截断)
例:
long a = 1L; // a real long long n = 5; // int, cast to long int x = n; // (will raise an error) int z = (int) n; // works fine