在java中将所有整数文字视为int,在java中将浮点文字视为double。 那为什么呢
byte b =10;
不会给出任何错误,但
float f = 10.0;
在两种情况下都会发生缩减,会导致精度误差丢失?
答案 0 :(得分:4)
对于int
到byte
,精度的丢失并不存在真正的问题,因为两种类型都具有相同的粒度。如果您尝试将文字转换为byte
的范围以外的值,则会收到错误。byte
。 (在这种情况下给出的错误信息有点误导。)
如果是double
到float
,您可以拥有一个在范围内的常量值,但仍会丢失精度 。在您的特定情况10.0中,该值可以在float
和double
中完全表示,但一般情况并非如此。
作为一个例子,考虑一下:
float f = (float) 10.1; // Or float f = 10.1f;
double d = 10.1;
System.out.println(f == d); // Prints false
这是因为从double
到float
的转换中精度丢失 - 两种类型都不能完全代表10.1,但double
接近float
确实。 ==
运算符将f
转换回double
,其值与d
不同。