可以为char指定整数值,但不能将整数变量赋给char

Ker*_*mit 6 java int char

为什么不编译以下代码

int n = 5;
char c = n;
Run Code Online (Sandbox Code Playgroud)

但以下编译

char c = 5;
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我不只是为char分配一个整数值吗?

Ell*_*sch 10

A char可以分配给int没有强制转换的,因为这是一个扩大的转换.换句话说,a int到a char需要强制转换,因为它是一个缩小的转换.

另见JLS.第5章转换和促销.


Tet*_*ure 6

他的问题是为什么他的代码不能编译,而不是如何做他正在尝试做的事情.

行的原因

char c = n

不编译,是因为char(-2 ^ 15到2 ^ 15 - 1)的范围远小于int(-2 ^ 31到2 ^ 31 - 1)的范围.编译器看到你正在尝试将一个int分配给一个char,并阻止你,因为它意识到了这一点.