Javaの問題です。コンパイラはversion 5.0以降

1.↓を実行するとなにが表示されるでしょう?

public static void main(String[] args) {
    System.out.println(new Integer(1).equals(new Integer(1)));
}
true

ですよね。

2.ではこれは?

public static void main(String[] args) {
    System.out.println(new Integer(1).equals(1.0));
}

3.じゃこれは?

public static void main(String[] args) {
    System.out.println(new Integer(1) == 1.0);
}

2.の答え

false

コンパイル時に

public static void main(String args[]) {
    System.out.println((new Integer(1)).equals(Double.valueOf(1.0D)));
}

に変換されます。

3.の答え

true

になります。
これは、コンパイル時に

public static void main(String args[]) {
    System.out.println((double)(new Integer(1)).intValue() == 1.0D);
}

に変換されます。primitiveの==での比較はキャストされるんですね。

ややこしい;