黑马程序员技术交流社区
标题:
java基础题
[打印本页]
作者:
fengche
时间:
2013-10-18 07:25
标题:
java基础题
本帖最后由 fengche 于 2013-10-18 10:32 编辑
public class Transitive {
public static void main(String[] args) throws Exception {
long x = Long.MAX_VALUE;
double y = (double) Long.MAX_VALUE;
long z = Long.MAX_VALUE - 1;
System.out.print((x == y) + " "); // true!
System.out.print((y == z) + " "); // true!
System.out.println(x == z); // false!
}
}
y和z为什么相等了? 既然x==y且y==z都为true 为什么x==z为false
作者:
FFF
时间:
2013-10-18 08:24
long类型x=9223372036854775807
double类型y=9.223372036854776E18
long类型z=9223372036854775806
x!=z=true
至于为什么x=y,y=z
请看以下代码:
public class FloatTest1 {
public static void main(String[] args) {
int intMax = Integer.MAX_VALUE;
float fintMax = intMax;
int intMin = Integer.MIN_VALUE;
float fintMin = intMin;
long longMax = Long.MAX_VALUE;
double dlongMax = longMax;
long longMin = Long.MIN_VALUE;
double dlongMin = longMin;
System.out.println("int类型的最大值是:" + intMax);
System.out.println("使用float存储后为:" + fintMax);
System.out.println("int类型的最小值是:" + intMin);
System.out.println("使用float存储后为:" + fintMin);
System.out.println("long类型的最大值是:" + longMax);
System.out.println("使用float存储后为:" + dlongMax);
System.out.println("long类型的最小值是:" + longMin);
System.out.println("使用float存储后为:" + dlongMin);
}
}
// 运行结果:
// int类型的最大值是:2147483647
// 使用float存储后为:2.14748365E9
// int类型的最小值是:-2147483648
// 使用float存储后为:-2.14748365E9
// long类型的最大值是:9223372036854775807
// 使用float存储后为:9.223372036854776E18
// long类型的最小值是:-9223372036854775808
// 使用float存储后为:-9.223372036854776E1
复制代码
浮点数只是近似的存储
从结果为我们得知,无论是使用float类型的变量来存储数值,还是用double类型的变量来存储数值,都损失了一定的精度,在使用浮点数来输出时,都未能输出准确的结果。
作者:
春天花开
时间:
2013-10-18 08:55
哈哈哈哈
作者:
轩辕迪卡
时间:
2013-10-18 09:26
运行这个代码可以看出来,其实x和z相差1,必然不等,而y是浮点型,将最大的正整数转成浮点型以后,他的有效数字只有15个,所以只要和MAX_VALUE的前15位相等,就会被判断为true。
public class Transitive {
public static void main(String[] args) throws Exception {
long x = Long.MAX_VALUE;
double y = (double) Long.MAX_VALUE;
long z = Long.MAX_VALUE - 1;
System.out.println((x == y) + " "); // true!
System.out.println((y == z) + " "); // true!
System.out.println((x == z) + " "); // false!
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("Z="+z);
}
}
作者:
4556
时间:
2013-10-18 09:45
这里的比较应该存在一个强制转化的问题,比如说long和double比较时候,会先把long转化成double再进行比较,,你可以把x y z,打出来看下结果就知道了,我也是根据结果猜的.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2