Javaでコンパイラを作成していたところ,Integerクラスの値が生成される部分があった.
Intergerクラスの値の比較演算子の記述する際に辛いことが発生したので書いておく
Tsurami.java
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a + b); // 2
System.out.println(a < b); // false
System.out.println(a <= b); // true
System.out.println(a == b); // false はっ?
System.out.println(a != b); // true はっ?
System.out.println(a == a); //true あ,もしかして
System.out.println(a != a); //false それっぽい
System.out.println(a.intValue() == b.intValue()); // true こうして
System.out.println(a.intValue() != b.intValue()); // false こうか
}
}
Integerクラスのインスタンスの値の比較を行う際,比較演算子を利用した.
比較演算子はうまく動くのに,等価演算子,非等価演算子が思わぬ結果を返した.
等価演算子と非等価演算子はIntegerのインスタンス自体を比較しているようでインスタンス自体が違えばfalseになる様子.
Integerクラスの中身はintValue()メソッドで取らないと等価比較はできないみたい.
美しい書き方あればコメントおねがします.
2015-10-09 追記
compareTo.java
a.compareTo(b)
を使うのが一番安全そうですね.
引数の値よりも小さい場合は-1、大きい場合は1、同じ場合は0を返す というのはちょっと煩わしいですが
そもそもなぜ大小比較だけ動くようにしているのか不思議なぐらいです.
コメントありがとうございました.