与operator ==比较,它是如何工作的?

时间:2014-12-31 08:16:06

标签: java comparison comparison-operators

我在Java测试中提出了以下问题:

import java.awt.Button;
class CompareReference 
{
    public static void main(String [] args) 
    {
        float f = 42.0f;
        float [] f1 = new float[2];
        float [] f2 = new float[2];
        float [] f3 = f1;
        long x = 42;
        f1[0] = 42.0f;
    }
}

这三个陈述是真的吗?

  1. f1 == f2
  2. f1 == f3
  3. f2 == f1[1]
  4. x == f1[0]
  5. f == f1[0]
  6. 我只需要选择3个陈述。

    嗯,1显然是假的,因为我们正在比较两个不同的引用,2显然是正确的,因为引用是相同的。但我不了解原始人。我感到困惑的是,如果我们将范围-128到127之间的Integer进行比较,那么它们就是缓存。相关topic。有什么关于原始的,一些狭隘的案例?

    我一直在寻找它在JLS 8中是如何运作的,但没有找到任何有用的东西。

2 个答案:

答案 0 :(得分:4)

比较3将无法编译:它尝试将数组与标量进行比较。

比较4和5涉及原语并按值完成。没有涉及参考或自动装箱。因此,以下内容与此无关:

  

我感到困惑的是,如果我们将范围-128到127之间的Integers进行比较,那么它们就是缓存。

由于42可以完全表示为float,因此比较4将返回true

比较5也将返回true,因为它正在比较两个相同的float值。

答案 1 :(得分:1)

2,4和5是true

虽然记住按==比较浮点数可能会比较棘手,但这样做更安全:

Math.abs(float1 - float2) < epsilon

其中epsilon是一个小数字(精度)。