char
大小为16位,短大小为16位。如果我们有一个接受short
参数的构造函数,如果我们将char传递给它,为什么即使char和short的大小相同也不接受?
import java.util.*;
public class Coffee {
Coffee(short s2) {
System.out.println("short accepted");
}
public static void main(String[] args) {
Coffee c=new Coffee('c');
}
}
为什么我们不能将char
传递给接受short
的构造函数?
答案 0 :(得分:7)
The JLS定义从char到short的转换为缩小转换。并且它是预期的,因为char是无符号的2字节整数,而short是带符号的2字节整数。因此,一半的char值不能用short来表示。
因此,您必须明确地将char转换为short来告诉编译器您知道这样的转换可能会丢失信息。
答案 1 :(得分:4)
char
未签名而short
已签名...您无法将所有char
- 可能的值存储在short
中。
char
存储16位:[0,65535]而short
存储16位:[ - 32768,32767]。
例如,您无法代表char
中的小数值为63000的short
,而short
可以存储值-213,而char
则不能。{ / p>
请注意,如果编译器知道值将适合,则不需要显式转换就可以使用。
请参阅the docs以更好地了解此问题:
short
:短数据类型是16位已签名的两个补码 整数。它的最小值为-32,768,最大值为 32,767 (含)。与字节一样,适用相同的准则:您可以 在大型数组中使用short来节省内存 记忆储蓄实际上很重要。
char
:char数据类型是单个16位Unicode字符。它有 最小值为' \ u0000' (或0)和' \ uffff'的最大值(要么 65,535 包括在内。