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])2つのを比較する原因となる必要がありIntegerます。したがって、これは合格するはずです。

そのため、そのコードの提案された結果もわかりません。私は合格、不合格、合格は正しいと言うでしょう。

于 2012-04-30T09:38:15.977 に答える
1

スカラーが「自動ボックス化」されている場合、オブジェクトホルダーが異なるため、==のテストは偽になりますが、コンパイラは定数と同じ正確な文字列を確認するため、文字列は==テストに合格します。使用済み。.equals()テストを検討している場合、それらはすべて等しくなります。

于 2012-04-30T09:43:53.727 に答える