LoginSignup
14
11

More than 5 years have passed since last update.

JavaのIntegerクラスを使って辛かったところ

Last updated at Posted at 2015-10-08

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を返す というのはちょっと煩わしいですが

そもそもなぜ大小比較だけ動くようにしているのか不思議なぐらいです.

コメントありがとうございました.

14
11
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11