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

时间:2017-07-27 13:40:16

标签: java casting

为什么我们不能将char值作为参数传递给任何接受short参数的方法,而我们可以将char值传递给参数为{的另一个方法{1}}类型?为什么类型转换不是从int发送到char,因为大小相等?我希望short也能存储与short一样多的值。

2 个答案:

答案 0 :(得分:13)

  

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

因为在调用上下文中没有从charshort的隐式转换。

  

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

那是因为 是在调用上下文中从charint的隐式转换。

  

为什么类型转换不会从char发送到short,因为大小相等?我希望short也能存储与short一样多的值。

虽然charshort具有相同的尺寸,但char是无符号的,而short已签名。这就是为什么没有从char隐式转换为short的原因。

charint的转换是扩展原始转化(JLS 5.1.2),而从char转换为short }是缩小原语转换(JLS 5.1.3)。特别是(强调我的):

  

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

答案 1 :(得分:6)

Java规范说:

  

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

     

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

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

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

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

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