はじめに
この実験では、Java で数値が Long 型であるかどうかを判断するさまざまな方法を探ります。まず、instanceof 演算子を使ってオブジェクトが Long ラッパークラスのインスタンスであるかどうかをチェックする方法を学びます。
その後、文字列から Long 値へのパースについて詳しく調べ、このプロセス中に発生する可能性のあるエラーの処理方法を理解します。最後に、Long 型と Integer 型を区別し、それぞれの主要な違いと、それぞれを効果的に扱う方法を強調します。
Long クラスのインスタンスをチェックする
このステップでは、Java の Long クラスを調べ、オブジェクトが Long クラスのインスタンスであるかどうかをチェックする方法を学びます。
Java では、long のようなプリミティブデータ型はオブジェクトではありません。ただし、Java は各プリミティブ型に対応するラッパークラスを提供しており、Long は long プリミティブ型のラッパークラスです。ラッパークラスを使用すると、プリミティブ値をオブジェクトとして扱うことができ、コレクションを操作する場合など、多くのシチュエーションで便利です。
オブジェクトが特定のクラスのインスタンスであるかどうかをチェックするには、instanceof 演算子を使用します。instanceof 演算子は、オブジェクトがクラス、サブクラス、またはインターフェースのインスタンスであるかどうかをテストするために使用される二項演算子です。
Long クラスで instanceof 演算子を使用する方法を示す簡単な Java プログラムを作成しましょう。
WebIDE エディタで
HelloJava.javaファイルが開いていない場合は、開きます。ファイルの内容全体を次のコードに置き換えます。
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演算子を使用して、myLongがLongのインスタンスであるかどうかをチェックします。instanceof演算子を使用して、myIntegerがLongのインスタンスであるかどうかをチェックします。
ファイルを保存します(Ctrl+S または Cmd+S)。
ターミナルで次のコマンドを実行して、プログラムをコンパイルします。
javac HelloJava.javaコンパイルが成功すると、何も出力されません。
コンパイルされたプログラムを実行します。
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 プログラムを変更しましょう。
WebIDE エディタで
HelloJava.javaファイルを開きます。既存のコードを次のコードに置き換えます。
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()を使用してnumberStringをLongオブジェクトに変換し、longObjectに格納します。- 別の文字列をパースすることで、このメソッドの柔軟性を示します。
- テキスト "9876543210" を含む
ファイルを保存します(Ctrl+S または Cmd+S)。
プログラムをコンパイルします。
javac HelloJava.javaコンパイルエラーがないことを確認します。
プログラムを実行します。
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 プログラムを変更しましょう。
WebIDE エディタで
HelloJava.javaファイルを開きます。既存のコードを次のコードに置き換えます。
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が保持できる最大値を出力します。- コメントアウトされた行を示しています。この行をコメント解除するとコンパイルエラーが発生します。なぜなら、値
2147483648はintの最大値より大きいからです。 - 同じ大きな値を
long型の変数largeLongに格納します。L接尾辞を使用して、これがlongリテラルであることを示しています。 Long.MAX_VALUEを使用して、longが保持できる最大値を出力します。Integer.SIZEとLong.SIZEを使用して、intとlongのビットサイズを出力します。
ファイルを保存します(Ctrl+S または Cmd+S)。
プログラムをコンパイルします。
javac HelloJava.javaコンパイルエラーがないことを確認します。
プログラムを実行します。
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
この出力は、long が int よりもはるかに大きな値を保持できることを明確に示しており、それぞれのビットサイズを確認できます。int と long を選択する際には、変数が格納する必要のある値の範囲を考慮してください。小さな数値にはメモリを節約するために int を使用し、大きな数値には long を使用します。
まとめ
この実験では、Java で数値が Long 型であるかどうかをチェックする方法を学びました。Long ラッパークラスとプリミティブ型の long との関係を調べました。特に、instanceof 演算子を使用してオブジェクトが Long クラスのインスタンスであるかどうかを判断することに焦点を当てました。実践的な例を通じて、instanceof を使用して Long オブジェクトと Integer オブジェクトを区別する方法を示しました。



