为什么我们允许将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