Java で数値が Long 型かどうかをチェックする方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java で数値が Long 型であるかどうかを判断するさまざまな方法を探ります。まず、instanceof 演算子を使ってオブジェクトが Long ラッパークラスのインスタンスであるかどうかをチェックする方法を学びます。

その後、文字列から Long 値へのパースについて詳しく調べ、このプロセス中に発生する可能性のあるエラーの処理方法を理解します。最後に、Long 型と Integer 型を区別し、それぞれの主要な違いと、それぞれを効果的に扱う方法を強調します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/type_casting("Type Casting") java/StringManipulationGroup -.-> java/strings("Strings") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/wrapper_classes("Wrapper Classes") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/data_types -.-> lab-559957{{"Java で数値が Long 型かどうかをチェックする方法"}} java/if_else -.-> lab-559957{{"Java で数値が Long 型かどうかをチェックする方法"}} java/type_casting -.-> lab-559957{{"Java で数値が Long 型かどうかをチェックする方法"}} java/strings -.-> lab-559957{{"Java で数値が Long 型かどうかをチェックする方法"}} java/classes_objects -.-> lab-559957{{"Java で数値が Long 型かどうかをチェックする方法"}} java/wrapper_classes -.-> lab-559957{{"Java で数値が Long 型かどうかをチェックする方法"}} java/object_methods -.-> lab-559957{{"Java で数値が Long 型かどうかをチェックする方法"}} end

Long クラスのインスタンスをチェックする

このステップでは、Java の Long クラスを調べ、オブジェクトが Long クラスのインスタンスであるかどうかをチェックする方法を学びます。

Java では、long のようなプリミティブデータ型はオブジェクトではありません。ただし、Java は各プリミティブ型に対応するラッパークラスを提供しており、Longlong プリミティブ型のラッパークラスです。ラッパークラスを使用すると、プリミティブ値をオブジェクトとして扱うことができ、コレクションを操作する場合など、多くのシチュエーションで便利です。

オブジェクトが特定のクラスのインスタンスであるかどうかをチェックするには、instanceof 演算子を使用します。instanceof 演算子は、オブジェクトがクラス、サブクラス、またはインターフェースのインスタンスであるかどうかをテストするために使用される二項演算子です。

Long クラスで instanceof 演算子を使用する方法を示す簡単な Java プログラムを作成しましょう。

  1. WebIDE エディタで HelloJava.java ファイルが開いていない場合は、開きます。

  2. ファイルの内容全体を次のコードに置き換えます。

    public class HelloJava {
        public static void main(String[] args) {
            // Create a Long object
            Long myLong = 12345L;
    
            // Create an Integer object
            Integer myInteger = 67890;
    
            // Check if myLong is an instance of Long
            if (myLong instanceof Long) {
                System.out.println("myLong is an instance of Long.");
            } else {
                System.out.println("myLong is not an instance of Long.");
            }
    
            // Check if myInteger is an instance of Long
            if (myInteger instanceof Long) {
                System.out.println("myInteger is an instance of Long.");
            } else {
                System.out.println("myInteger is not an instance of Long.");
            }
        }
    }

    このコードでは、以下のことを行っています。

    • 12345L という値を持つ Long オブジェクト myLong を作成します。L 接尾辞は、これが long リテラルであることを示します。
    • 67890 という値を持つ Integer オブジェクト myInteger を作成します。
    • instanceof 演算子を使用して、myLongLong のインスタンスであるかどうかをチェックします。
    • instanceof 演算子を使用して、myIntegerLong のインスタンスであるかどうかをチェックします。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. ターミナルで次のコマンドを実行して、プログラムをコンパイルします。

    javac HelloJava.java

    コンパイルが成功すると、何も出力されません。

  5. コンパイルされたプログラムを実行します。

    java HelloJava

    次の出力が表示されるはずです。

    myLong is an instance of Long.
    myInteger is not an instance of Long.

この出力は、Long オブジェクトとして作成した myLong が実際に Long クラスのインスタンスであり、Integer オブジェクトとして作成した myInteger はそうではないことを確認しています。

文字列を Long 型にパースする

このステップでは、数値の String 表現を Long オブジェクトまたは long プリミティブ型に変換する方法を学びます。これは、ユーザー入力やファイルなどから数値データをテキストとして受け取る際に一般的なタスクです。

Long クラスは、この変換を行うための静的メソッドを提供しています。最も一般的に使用される 2 つのメソッドは次のとおりです。

  • Long.parseLong(String s): このメソッドは、文字列引数を符号付き 10 進数の long としてパースします。プリミティブな long 値を返します。
  • Long.valueOf(String s): このメソッドは、文字列引数で表される値を保持する Long オブジェクトを返します。

文字列から long 型と Long 型にパースする方法を示すために、HelloJava.java プログラムを変更しましょう。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。

  2. 既存のコードを次のコードに置き換えます。

    public class HelloJava {
        public static void main(String[] args) {
            String numberString = "9876543210";
    
            // Parse the string to a primitive long
            long primitiveLong = Long.parseLong(numberString);
            System.out.println("Parsed primitive long: " + primitiveLong);
    
            // Parse the string to a Long object
            Long longObject = Long.valueOf(numberString);
            System.out.println("Parsed Long object: " + longObject);
    
            // Demonstrate parsing a different string
            String anotherNumberString = "112233445566";
            long anotherPrimitiveLong = Long.parseLong(anotherNumberString);
            System.out.println("Parsed another primitive long: " + anotherPrimitiveLong);
        }
    }

    このコードでは、以下のことを行っています。

    • テキスト "9876543210" を含む String 変数 numberString を定義します。
    • Long.parseLong() を使用して numberString をプリミティブな long 型に変換し、primitiveLong に格納します。
    • Long.valueOf() を使用して numberStringLong オブジェクトに変換し、longObject に格納します。
    • 別の文字列をパースすることで、このメソッドの柔軟性を示します。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. プログラムをコンパイルします。

    javac HelloJava.java

    コンパイルエラーがないことを確認します。

  5. プログラムを実行します。

    java HelloJava

    次のような出力が表示されるはずです。

    Parsed primitive long: 9876543210
    Parsed Long object: 9876543210
    Parsed another primitive long: 112233445566

この出力は、Long.parseLong()Long.valueOf() の両方が、数値の文字列表現を対応する long 型と Long 型の値に正常に変換したことを示しています。

文字列が long 型として表現できる有効な数値を含まない場合、これらのメソッドは NumberFormatException をスローすることに注意することが重要です。この基本的な実験ではエラーハンドリングについては扱いませんが、実際のアプリケーションではこの点を考慮する必要があります。

Long 型と Integer 型の違いを理解する

このステップでは、Java における long(およびそのラッパークラス Long)と int(およびそのラッパークラス Integer)の主要な違いを理解することに焦点を当てます。両者とも整数を格納するために使用されますが、保持できる値の範囲とメモリ使用量には大きな違いがあります。

主な違いはサイズにあります。

  • int: int は 32 ビットの符号付き 2 の補数整数です。これは、-2,147,483,648 から 2,147,483,647 までの値を格納できることを意味します。
  • long: long は 64 ビットの符号付き 2 の補数整数です。これにより、-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までのはるかに広い範囲の値を格納できます。

この違いを説明するために、HelloJava.java プログラムを変更しましょう。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。

  2. 既存のコードを次のコードに置き換えます。

    public class HelloJava {
        public static void main(String[] args) {
            // Maximum value for int
            int maxInt = Integer.MAX_VALUE;
            System.out.println("Maximum value of int: " + maxInt);
    
            // Trying to store a value larger than maxInt in an int (will cause error if uncommented)
            // int tooBigInt = 2147483648; // This line would cause a compilation error
    
            // A value larger than maxInt, stored in a long
            long largeLong = 2147483648L; // Note the 'L' suffix
            System.out.println("A large value stored in long: " + largeLong);
    
            // Maximum value for long
            long maxLong = Long.MAX_VALUE;
            System.out.println("Maximum value of long: " + maxLong);
    
            // Demonstrating the size difference with literals
            System.out.println("Size of int in bits: " + Integer.SIZE);
            System.out.println("Size of long in bits: " + Long.SIZE);
        }
    }

    このコードでは、以下のことを行っています。

    • Integer.MAX_VALUE を使用して、int が保持できる最大値を出力します。
    • コメントアウトされた行を示しています。この行をコメント解除するとコンパイルエラーが発生します。なぜなら、値 2147483648int の最大値より大きいからです。
    • 同じ大きな値を long 型の変数 largeLong に格納します。L 接尾辞を使用して、これが long リテラルであることを示しています。
    • Long.MAX_VALUE を使用して、long が保持できる最大値を出力します。
    • Integer.SIZELong.SIZE を使用して、intlong のビットサイズを出力します。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. プログラムをコンパイルします。

    javac HelloJava.java

    コンパイルエラーがないことを確認します。

  5. プログラムを実行します。

    java HelloJava

    次のような出力が表示されるはずです。

    Maximum value of int: 2147483647
    A large value stored in long: 2147483648
    Maximum value of long: 9223372036854775807
    Size of int in bits: 32
    Size of long in bits: 64

この出力は、longint よりもはるかに大きな値を保持できることを明確に示しており、それぞれのビットサイズを確認できます。intlong を選択する際には、変数が格納する必要のある値の範囲を考慮してください。小さな数値にはメモリを節約するために int を使用し、大きな数値には long を使用します。

まとめ

この実験では、Java で数値が Long 型であるかどうかをチェックする方法を学びました。Long ラッパークラスとプリミティブ型の long との関係を調べました。特に、instanceof 演算子を使用してオブジェクトが Long クラスのインスタンスであるかどうかを判断することに焦点を当てました。実践的な例を通じて、instanceof を使用して Long オブジェクトと Integer オブジェクトを区別する方法を示しました。