为什么我们不能将char值作为参数传递给任何接受short参数的方法,而我们可以将char值传递给另一个参数int类型为?的方法.考虑char到short尺寸相同,为什么不进行型式铸造?我希望short也可以存储尽可能多的值short.
Jon*_*eet 13
为什么我们不能将
char值作为参数传递给任何接受short参数的方法
因为有一个从没有隐式转换char到short在调用上下文.
我们可以将
char值传递给参数int类型为?的另一个方法.
这是因为有是从隐式转换char到int在调用上下文.
考虑
char到short尺寸相同,为什么不进行型式铸造?我希望short也可以存储尽可能多的值short.
虽然char和short有相同的大小,char是未签名而short被签署.这就是为什么没有隐含的转换char为short.
从charto 转换int是一个扩展的原始转换(JLS 5.1.2),而从charto 转换short是一个缩小的原始转换(JLS 5.1.3).特别是(强调我的):
将char转换为整数类型T同样简单地丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数.除了可能丢失有关数值大小的信息之外这可能导致结果值为负数,即使字符表示16位无符号整数值.
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保证你想在这里进行类型转换.