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の==での比較はキャストされるんですね。
ややこしい;