发现这个网站大概是测试想要的开发人员...
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池中,所以我可以理解为什么最后一个是真的。但为什么第一个不正确?
答案 0 :(得分:1)
这不是有效的Java语法。你无法致电Asserts Equality ()
。
作为JUnit测试中的断言,这必须是Assert.assertEquals(array[0], array2[0])
,这将导致比较两个Integer
s。所以这应该通过。
所以我也不理解你提出的代码结果。我会说传球,失败,传球是对的。
答案 1 :(得分:1)
如果标量是“自动装箱”,那么它们将具有不同的对象持有者,因此==的测试将是错误的,但是字符串将通过==测试,因为编译器确保完全相同的字符串使用常量。如果你正在考虑.equals()测试,那么它们都是平等的。