我们知道,double
文字值不会由于编译时的数据丢失而隐式转换为float
:
我们还知道int
也不会隐式转换为byte
,但是在这种情况下,考虑到字面量是int
,它的工作原理是:
您介意向我解释那里正在发生什么过程以及它如何在后台运行吗?
答案 0 :(得分:5)
文字整数是常数,它将永不变。因此,如果隐式转换是安全的,则编译器可以在编译时推断出它们。
这也是byte i = 300;
在编译时失败的原因。
当转换为非恒定值时,不能说相同; 变量。编译器无法知道i
的值是什么,因此隐式转换是不安全的,也是不允许的。
关于为什么这种行为会出现浮点数和双精度的现象(请参见注释):原因是在语言中存在 个浮点文字,因此,如果要使用浮点文字,请使用浮点文字。没有字节或简短的文字,因此编译器可以帮助您
此外,将有效的int
装入byte
意味着没有数据/精度损失;这些位是相同的,您只是在高端截断了0位。将double
转换为float
时不能说同样的话。将任何给定数字表示为单精度或双精度浮点数是根本不同的,并且固有地会损失精度。两种语言之间的语言设计决策不同是有理由的,因为它们在总体上是不同的。