Java 中数值运算与比较
package com.biwu.demo;
public class App {
public static void main(String[] args) {
double a = 0.1, b = 0.2, c = 0.3;
System.out.println(a + b == c);
Integer i = 100, j = 100;
System.out.println(i == j);
Integer p = 200, q = 200;
System.out.println(p == q);
}
}
💡解答
以下是对这段代码的逐步分析:
首先,对于 double a = 0.1, b = 0.2, c = 0.3; System.out.println(a + b == c); 这部分:
在 Java 中,由于浮点数的精度问题,0.1 和 0.2 在计算机中存储的实际值并不是精确的 0.1 和 0.2 ,当它们相加时,结果也不是精确的 0.3 。所以,直接比较 a + b 是否等于 c ,结果通常是 false 。
接下来,对于 Integer i = 100, j = 100; System.out.println(i == j); 这部分:
在 Java 中,对于值在 -128 到 127 之间的整数,Java 会对其进行缓存。100 在这个范围内,所以当创建 Integer 对象 i 和 j 并赋值为 100
时,实际上引用的是同一个缓存对象。因此,使用 == 比较时,结果为 true 。
最后,对于 Integer p = 200, q = 200; System.out.println(p == q); 这部分:
200 超出了 -128 到 127 的范围,所以创建的 Integer 对象 p 和 q 是两个不同的对象。使用 == 比较两个不同的对象的引用,结果为 false 。
在 Java 中,对于 -128 到 127 之间的整数,为了提高性能和节省内存,Java 会将这些整数进行缓存。当创建新的 Integer 对象并赋值在这个范围内时,
如果已经存在相同值的缓存对象,就会直接引用已有的缓存对象,而不是重新创建新的对象。这样可以减少对象的创建和销毁,提高程序的运行效率。
浙公网安备 33010602011771号