为什么不显示“好”这个词?

时间:2013-10-13 01:55:30

标签: java arrays

当我运行此代码时,为什么不显示“好”这个词?存储在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");

        }
     }

}

4 个答案:

答案 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;