Asserts Equality在这里发生了什么?

时间:2012-04-30 09:31:09

标签: java reference assert equality

发现这个网站大概是测试想要的开发人员...

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

问题是这个......

  

根据给定的代码,以下哪些测试将返回a   '真实'的答案和通过,这将返回一个'错误'答案和   失败?

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(虽然没有说明)。

Equality究竟在做什么?是检查相同的对象还是相同的?我知道有些对象被嵌入到Java中的String / Integer池中,所以我可以理解为什么最后一个是真的。但为什么第一个不正确?

2 个答案:

答案 0 :(得分:1)

这不是有效的Java语法。你无法致电Asserts Equality ()

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

所以我也不理解你提出的代码结果。我会说传球,失败,传球是对的。

答案 1 :(得分:1)

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