当我运行此代码时,为什么不显示“好”这个词?存储在Array1和Array2的位置0的值对于两者都是1。
public class ArrayStuff {
public static void main(String[] args) {
double value = 1;
Double[] Array1 = new Double[10];
Array1 = new Double[] {1.0};
Double[] Array2 = new Double[10];
Array2[0] = value;
int i = 0;
System.out.println(Array1[0]);
System.out.println(Array2[i]);
if (Array1[0] == Array2[i])
{
System.out.println("good");
}
}
}
答案 0 :(得分:5)
在Java中,当有人问
时Double d1 = ...;
Double d2 = ...;
if (d1 == d2) {
System.out.println("Equal");
} else {
System.out.println("Not Equal");
}
JRE不会取消Double
个对象,因此会检查两个Double
是否是同一个对象。在这里,他们不是。请注意这两个代码块之间的区别:
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
if (i1 == i2) {
System.out.println("Equal");
} else {
System.out.println("Not Equal");
}
和
Integer i1 = Integer.valueOf(1);
Integer i2 = Integer.valueOf(1);
if (i1 == i2) {
System.out.println("Equal");
} else {
System.out.println("Not Equal");
}
第二个版本重用Integer
对象,因此第一个版本打印 Not Equal ,第二个版本打印 Equal 。
答案 1 :(得分:3)
您了解到计算机无法将浮点数表示为精确的精度。解决方案是使用代码找到“足够接近”的浮点解决方案或使用十进制数字的浮点解决方案。
答案 2 :(得分:1)
因为有限精度数字具有limits,特别是在比较它们是否完全相等时。
您应该通过检查值之间的差异是否小于某个阈值来解决问题:
public final double EPSILON = 0.001;
if (Math.abs(Array1[0] - Array2[i]) < EPSILON)
...
答案 3 :(得分:0)
你的第一个变量必须是双倍?我的意思是用int来解决这个问题。
这提出了一个问题:这行实际上是否创建了包含10个插槽的数组,并将第一个值:1.0分配给数组中的0个插槽,或者无法正确创建数组?
Double[] Array1 = new Double[10];
Array1 = new Double[] {1.0};
如果没有那么那就是为什么,下面的代码不适合你。没有向你展示“好”字。
if (Array1[0] == Array2[i])
{
System.out.println("good");
}
... 但是,也许如果你在第一个变量中改为1.0作为值...但是它不同于比较双精度......它不推荐。
Double Value = 1.0;