Loading...

No image

Integer型とint型は同じものだとばかり思ってました。

どうも、こだまです。

タイトル通り同じものだと思ってましたが、厳密には違うんですね。
当たり前だろって思われる方もいるとおもいますが、びっくりしたので備忘録がてら残します。

そもそも何が違うの?

分類すると、Integer型はObject型であり、int型はプリミティブ型です。つまり、大本が違うとのこと。Integer型はObject型なので、比較メソッドの#equalsを持っていたりします。
じゃあ、どうして同じ数値として扱えるのか。それは、Javaのオートボクシング機能(Java1.5からの機能)というもので-128 ~ 127までを同じInteger型で扱ってくれるので、以下の結果は同じになります。

けれど、先ほどの範囲を超えると結果が変わります。

そのため等値として比較する際に、範囲を超える場合は

こうします。Integer型の#equalsを使用します。
つまり、Integer型の比較を行う際には#equalsで比較するのがbetterかなと。
けど、#equalsで比較するってことはNPEの可能性があります。それをどうにか回避するために以下のようにしてみました。

はあ、わかりずらっ!!!
可読性ニ難アリって感じですね。ちなみに、Integer#compareは第一引数より第二引数の値が大きければ-1を、同じなら0を、第一引数の方が大きければ1を返します。文系出身の僕には直感的にわからないのですが、他の方はどうなんでしょうか。

じゃあInteger型を使うメリットってなんだろう

って思いませんか?って思ったのですが、ちゃんとメリットあるからって言ってる方がいました。
http://www.atmarkit.co.jp/ait/articles/0611/22/news143.html
確かに、コレクションとかはObject型じゃないと使えないって聞いたこともあったな。
プリミティブ型では値渡しでメモリ効率が悪いって書いてあってなるほどと思ったものの、さすがになんでもかんでもInteger型にするのも可読性・・・ってなりますよね。

まとめ

Integer型とint型は違うんだなって思いました。(感想が雑)
まあ、頭の片隅にでも入れておくといつか役立つ時がくる、かも。

それでは、今回はこれにて。
ではでは。

情報戦略テクノロジー