Why is char c = (char)65.8;
Java 中允许吗?
既然这样它不应该抛出错误吗65.8
不是一个精确的 Unicode 值?我知道双精度数被截断为整数,在这种情况下,65
,但对我来说允许程序员进行这样的转换似乎是糟糕的设计。
它被称作缩小型铸造.
From oracle docs:
原始类型的 22 种特定转换称为窄化
原始转换:
短到字节或字符
字符到字节或短字符
int 到 byte、short 或 char
long 到 byte、short、char 或 int
float 到 byte、short、char、int 或 long
double 到 byte、short、char、int、long 或 float
缩小原始转换可能会丢失有关
数值的总体大小,也可能会失去精度和
范围。
在Java中,有两种基本类型的类型转换:widening and 缩小.
A widening conversion
当您从较小(或更窄)范围的类型转换为更大(或更宽)范围的类型时,会发生这种情况。因此,不会有数据丢失的机会,并且会考虑转换"safe."
A narrowing conversion
当您从较大(或更宽)范围的类型转换为较小(或更窄)范围的类型时,会发生这种情况。由于我们正在缩小范围,因此有可能会丢失数据,因此考虑进行此转换"unsafe"
转换自byte to char是一个特例,代表widening and 缩小同时。转换从转换开始byte to an int然后是int被转换为char.
我能想到为什么缩小类型转换不会导致错误/异常的原因之一是在没有数据丢失的情况下允许方便/简单/快速的类型转换。编译器将其留给我们来确保转换后的数据能够适应较小的范围。如果我们想要快速截断值(例如舍入 a 的值),它也很有用double
(通过将其类型转换为int
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)