2015-10-30 4 views
5

私はインタビューの質問に直面した。設定に関連するJavaのインタビューのパズル

次のコードの出力はどのようなものですか。

package com.demo; 

import java.util.HashSet; 
import java.util.Set; 

public class Test { 

    public static void main(String[] args) { 
    Set<Short> set=new HashSet<Short>(); 

     for (short i = 0; i < 10; i++){ 
      set.add(i); 
      set.remove(i-1); 
     } 

     System.out.println(set.size()); 
    } 
} 

それは与えている出力:10

しかし、私はその出力10

誰もがここで起こってください何を私に答えることができる理由を混同しています。

SItansu

答えて

5

リテラル値1のタイプはintです。値i - 1はタイプintであり、タイプshortではなく、iです。ボックスに入れたShortのインスタンスをセットに追加しますが、ボックス化されたインスタンスはIntegerです。 remove()メソッドは、したがって、ShortIntegerと等しくないため、何も削除しません。

+1

また、 'Set 'の場合でも 'Object'型の引数を取るようにremoveが定義されているので、型の不一致に関する警告やエラーは出ません。 –

+0

コンパイラは本当に満足しています。しかし、私のIDE(IntelliJ)は、この可能性のあるバグについて私に警告するほどスマートです。 –

+0

ああ、私は現時点でEclipseを使用していますが、これは何も表示されません。一口。 (おそらくどこかの設定があります....) –

5

おかげで式I-1はint型を有し、Integerオブジェクトにautoboxedされているので、プログラムは、セットのショートオブジェクトを追加した後、Integerオブジェクトを削除しようとしています。このセットにはIntegerオブジェクトがないため、何も削除されません。

関連する問題