为什么我们不能将char
值作为参数传递给任何接受short
参数的方法,而我们可以将char
值传递给参数为{的另一个方法{1}}类型?为什么类型转换不是从int
发送到char
,因为大小相等?我希望short也能存储与short
一样多的值。
答案 0 :(得分:13)
为什么我们不能将
char
值作为参数传递给任何接受short
参数的方法
因为在调用上下文中没有从char
到short
的隐式转换。
而我们可以将
char
值传递给参数为int
类型的另一个方法吗?
那是因为 是在调用上下文中从char
到int
的隐式转换。
为什么类型转换不会从
char
发送到short
,因为大小相等?我希望short也能存储与short
一样多的值。
虽然char
和short
具有相同的尺寸,但char
是无符号的,而short
已签名。这就是为什么没有从char
隐式转换为short
的原因。
从char
到int
的转换是扩展原始转化(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保证你想在这里进行类型转换。