6

可能重复:
Java 中的 char 和 int

AsicII 表:http ://www.asciitable.com

下面的代码打印出对应字符的十进制值,例如“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/编程基础?

4

3 回答 3

8

Achar只是一个无符号的 16 位数字,因此由于它基本上是int类型的子集,JVM 可以毫无歧义地转换它。

于 2013-01-15T17:12:11.580 回答
3

Java 是基于 C 编写的,这就是 C 的一个特性:字符也代表一个数字

但是,作为标量类型,有一个问题: - 打印 char 将产生 ascii char - 打印 int 将产生数字

还有一些关于upcast和downcast的细节(int转换成char,需要明确地完成,因为涉及到一些截断)

例子:

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
于 2013-01-15T17:11:41.287 回答
2

char有双重人格。

它是一个 16 位无符号整数数值类型,这使得对 int 的赋值成为一种非常自然的操作,包括扩展原始转换,这是编译器在需要时插入的转换之一,无需显式强制转换。

这也是 I/O 和字符串操作的字符表示方式。

于 2013-01-15T17:14:28.817 回答