【Java】Integerとintの違いを初心者にもわかりやすく解説!
  • facebookページ
  • twitterページ
  • 2019.10.31

    【Java】Integerとintの違いを初心者にもわかりやすく解説!

    Javaを触っていると値型(プリミティブ型)や参照型(クラス型)といったものが出てきます。

    今回は値型(プリミティブ型)のラッパークラスとなっているintegerについて改めて学習しましょう。

    ラッパークラスとは

    Javaには型やクラスといった言葉が沢山出てきます。これを理解できているのと居ないのでは今後学習していく上で大きな差が出てきますのでまずは言葉を理解しましょう。

    ラッパークラスの”ラッパー”はラップ(包括)することを指します。Integerはラッパークラスに属しますが、これはintやStringの様な型を包括するクラスと思ってください。

    具体的に説明すると、例えばintは値型(プリミティブ型)に属します。

    値型はメソッドを持たない為、直接呼び出すことが出来ません。

    この値型にインスタンスを与えメソッドが使えるようにしたものをラッパークラスと呼びます。

    尚、int型のラッパークラスはIntegerクラスとなっています。

    Integerの使い方

    具体的な使い方を見てみましょう。次のコードを見てください。

    実行結果

    このコードは、toStringメソッドを使い文字列変換をかけて出力させるという単純なコードです。通常、int型にはtoStringメソッドを使用することはできませんので「int.toString()」といったような記述は不可能となっていますが、Integerクラスを使うことでtoStringメソッドを使用してもエラーなく出力出来ています。

    Integerクラスで数値・文字列変換

    変換には”valueOf”、”parseInt”というメソッドが用意されています。

    valueOfは引数に指定された数値をString型の値として返します。

    parseIntは引数に指定された文字列をint型の値として返します。なお引数に指定できるものは整数の値のみとなっています。

    実際には次のように記述します。

    実行結果

    整数でない文字列や形式的に数値となっていない文字列を変換しようとした場合には「java.lang.NumberFormatException: For input string」という例外が吐き出されます。

    実行結果

    また、指定可能な範囲を超えた数値の文字列変換時にも「java.lang.NumberFormatException: Value out of range」という例外が吐き出されますので注意が必要です。

    最大値と最小値について

    Integerクラスで指定できる最大値と最小値については、次のように記述して調べることが出来ます。

    実行結果

    Integer型のオブジェクト比較

    Integer型のオブジェクトを比較する場合、比較演算子を使って比較しようとすると同じ値でも”false”となります。

    この理由としては、Java 8以前の環境では「new Integer()」を使ってオブジェクトを生成させるので、値が一緒でも別のオブジェクトとしてされ比較演算子が正常に動作しないことが挙げられます。

    Java9以降の環境ではIntegerにNew演算子を使用することは非推奨とされているため、新たな方法として「Integer.valueOf()」に変更となりました。

    これにより比較演算子を使用してもfalseになることはなくなったのですが、ここではあえてJava 8以前の環境での動作を確認していきます。

    まずは以下のコードを見てみましょう。

    実行結果

    このコードでは、Integerクラスで二つのオブジェクトを生成し、それらを比較演算子で比較した場合の結果ですが、falseと返っていることが分かります。

    この問題はequalsメソッドを使用することで簡単に解決することが出来ます。

    早速次のコードを見てみましょう。

    実行結果

    先ほどと同じ比較のサンプルコードですが、こちらでは”true”と返ってくることが確認できました。

    まとめ

    いかがでしたか?

    今回はIntegetについて具体的なコードを踏まえた解説をしてみました。

    intと混同されている方も少なからずいらっしゃるようですが、intとIntegerは全く別のものです。

    この記事を見てご理解いただけると非常に嬉しく思います。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE