先看一段代码
public static void main(String[] args) {
float a=1;
long b= a;
}
然后报错了。。。。。
然后我去看了看<Java核心技术++卷1>这本书
书中有一张类型之间相互转换的图
我们经常需要将一种数值类型转换为另一种数值类型。 图中给出了数值类型之间的合法转换。在图中有 6 个实心箭头,表示无信息丢失的转换; 有 3 个虚箭头, 表示可能有精度损失的转换。 例如,123 456 789 是一个大整数, 它所包含的位数比 float 类型所能够表达的位多。当将这个整型数值转换为 float 类型时, 将会得到同样大小的结果,但却失去了一定的精度。
当我们强制类型转换之后程序就不报错了。相当于告诉java我们不怕精度的丢失,那既然你都不怕,人家还怕什么。给你报错是提醒你,上面这种float转long会有精度丢失,可能你自己并不知道,所以人家提醒你。
特殊例子
public static void main(String[] args) {
short s = 1;
s = s + 1;
}
然后报错
java: 不兼容的类型: 从int转换到short可能会有损失
public static void main(String[] args) {
short s = 1;
s += 1;
}
现在这段代码就不报错了,因为s+=1中具有强制转换,相当于s=(short)(s+1)