在Java中输入从char到short的转换

Ada*_*dav 5 java casting

为什么我们不能将char值作为参数传递给任何接受short参数的方法,而我们可以将char值传递给另一个参数int类型为?的方法.考虑charshort尺寸相同,为什么不进行型式铸造?我希望short也可以存储尽可能多的值short.

Jon*_*eet 13

为什么我们不能将char值作为参数传递给任何接受short参数的方法

因为有一个从没有隐式转换charshort在调用上下文.

我们可以将char值传递给参数int类型为?的另一个方法.

这是因为有从隐式转换charint在调用上下文.

考虑charshort尺寸相同,为什么不进行型式铸造?我希望short也可以存储尽可能多的值short.

虽然charshort有相同的大小,char是未签名而short被签署.这就是为什么没有隐含的转换charshort.

charto 转换int是一个扩展的原始转换(JLS 5.1.2),而从charto 转换short是一个缩小的原始转换(JLS 5.1.3).特别是(强调我的):

将char转换为整数类型T同样简单地丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数.除了可能丢失有关数值大小的信息之外这可能导致结果值为负数,即使字符表示16位无符号整数值.


Max*_*Max 6

Java规范说:

此外,如果表达式是byte,short,char或int类型的常量表达式(第15.28节):

如果变量的类型是byte,short或char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示.

Char的最小值为0,最大值为65,535.

Short的最小值为-32,768,最大值为32,767.

整数的最小值为-2,147,483,648,最大值为2,147,483,647.

所以char可以适合整数但不能缩短,这就是为什么你应该向java保证你想在这里进行类型转换.