为什么在Java中允许使用double转换为char?

Koo*_*ing 8 java double casting char

为什么char c = (char)65.8;Java中允许?

它不应该抛出错误,因为65.8不是一个确切的Unicode值?我知道在这种情况下,double被截断为整数,65但是对于我来说,允许程序员进行这样的转换似乎是糟糕的设计.

nem*_*035 10

这称为窄型铸造.来自oracle docs:

原始类型的22个特定转换称为缩小基元转换:

短到字节或字符

char到byte或short

int到byte,short或char

long to byte,short,char或int

float to byte,short,char,int或long

double to byte,short,char,int,long或float

缩小的原始转换可能丢失关于数值的总量值的信息,并且还可能失去精度和范围.

在Java中,有两种基本类型的类型转换:扩展缩小.

widening conversion当您从具有较小(或较窄)的类型转换为具有较大(或较宽)范围的类型时,会发生A. 因此,没有机会丢失数据,转换被认为是"安全的".

narrowing conversion当您从具有较大(或较宽)的类型转换为具有较小(或较窄)范围的类型时,会发生A. 由于我们缩小了范围,因此可能会丢失数据,因此这种转换被认为是"不安全的"

缩小类型转换

bytechar的转换是一种特殊情况,同时表示扩大缩小.该转换由转换开始字节INT,然后INT被转化成焦炭.

我可以想到为什么缩小类型转换不会导致错误/异常的一个原因是在没有数据丢失的情况下允许方便/简单/快速的类型转换.编译器将它留给我们以确保转换后的数据能够适应较小的范围.如果我们想要快速截断值,例如舍入a的值double(通过将其类型转换为a int),它也很有用.