1

发现这个网站可能是为了测试想要的开发人员......

http://www.devchallenge.co.uk/challenge-2

问题是这个...

根据给定的代码,以下哪些测试将返回“真”答案并通过,哪些将返回“假”答案并失败?

ArrayList array1 = new ArrayList();
ArrayList array2 = new ArrayList();

array1.add(1);
array1.add(2);
array1.add("Aviva");

array2.add(1);
array2.add(2.0);
array2.add("Aviva");

Asserts
   Equality
      (array1[0],array2[0]);

Asserts
   Equality
      (array1[1],array2[1]);

Asserts
   Equality
      (array1[2],array2[2]);

显然答案是“失败”、“失败”、“通过”。

我不是 Java 开发人员——我假设这个挑战来自 Java(尽管没有说明)。

平等到底在做什么?它是检查相同的对象还是相同的?我知道有些对象被嵌入到 Java 中的字符串/整数池中,所以我可以理解为什么最后一个对象是正确的。但是为什么第一个不是真的?

4

2 回答 2

1

这不是有效的 Java 语法。你不能打电话Asserts Equality ()

作为 JUnit 测试中的断言,这必须是Assert.assertEquals(array[0], array2[0])导致比较两个Integers 的原因。所以这应该通过。

所以我也不明白你对该代码提出的结果。我会说通过,失败,通过是正确的。

于 2012-04-30T09:38:15.977 回答
1

如果标量被“自动装箱”,那么它们将具有不同的对象持有者,因此 == 的测试将是错误的,但字符串将通过 == 测试,因为编译器确保与常量相同的确切字符串是用过的。如果您正在考虑 .equals() 测试,那么它们都将是相等的。

于 2012-04-30T09:43:53.727 回答