この記事では、Integer クラスについて説明します。次の質問について考えてみましょう。
実際的な意味では、プリミティブとそのラッパー クラスには多くの共通点があります。ほとんどの操作は同じように実行されます。ただし、ラッパー クラスには、プリミティブの特徴ではない多くの特徴があります。まず、クラスがあります。ラッパー クラスを操作するときは、オブジェクトを操作します。第 2 に (以降のすべてはポイント 1 から続きます)、これらのオブジェクトは null になる可能性があります。3 番目に、ラッパー クラスは、特定のデータ型の操作を容易にする多くの定数とメソッドを提供します。この記事では、Integer クラスの操作について詳しく見ていきます。
Integer クラスは、プリミティブ型 int のラッパー クラスです。このクラスには、int 型のフィールドが 1 つ含まれています。ラッパー クラスとして、Integer は int を操作するためのさまざまなメソッドと、int を String に変換するためのメソッド、および String を int に変換するための多数のメソッドを提供します。以下では、クラスを使用したさまざまな例を見ていきます。作成から始めましょう。最も一般的に使用される (そして最も使いやすい) のは、次の作成オプションです。
ただし、これらすべてに注意して、Integer は参照データ型であり、この型の変数は null になる可能性があることを覚えておく必要があります。この場合 (変数が null の場合)、算術演算 (および null がよくないその他の演算) は控えた方がよいでしょう。以下に例を示します。
次のコードを実行して、これらすべての定数の値を見てみましょう。
- ラッパークラスとは何ですか。
- プリミティブの自動パッキング/アンパッキング。
- Integer クラスの操作、そのメソッドと定数。
プリミティブ型のラッパー クラス
ご存知のとおり、Java にはさまざまなデータ型があり、次の 2 つのブロックに分けることができます。- 原生的;
- 参照。
- 整数 - バイト、short、int、long。
- 浮動小数点数 (実数) - float、double;
- 論理データ型 - ブール値。
- 文字データ型 - char。
プリミティブ型 | ラッパークラス |
---|---|
バイト | バイト |
短い | 短い |
整数 | 整数 |
長さ | 長さ |
浮く | 浮く |
ダブル | ダブル |
ブール値 | ブール値 |
チャー | キャラクター |
整数_
Integer クラスは、プリミティブ型 int のラッパー クラスです。このクラスには、int 型のフィールドが 1 つ含まれています。ラッパー クラスとして、Integer は int を操作するためのさまざまなメソッドと、int を String に変換するためのメソッド、および String を int に変換するための多数のメソッドを提供します。以下では、クラスを使用したさまざまな例を見ていきます。作成から始めましょう。最も一般的に使用される (そして最も使いやすい) のは、次の作成オプションです。
Integer a = 3;
つまり、この場合の Integer 変数の初期化は、int 変数の初期化と似ています。さらに、Integer 変数は int 変数の値で初期化できます。
int i = 5;
Integer x = i;
System.out.println(x); // 5
上記の場合、自動パッキングは暗黙的に行われます。以下で詳しく説明します。上記の初期化オプションに加えて、コンストラクターと new キーワードを使用して、他のオブジェクトと同様に整数変数を作成できます。
Integer x = new Integer(25);
System.out.println(x);
ただし、書き込みと読み取りに時間がかかるため、このオプションは最も一般的ではありません。int 変数で実行できることはすべて、Integer 変数でも実行できます。それらは次のとおりです。
折り畳み |
|
減算 |
|
かける |
|
分ける |
|
インクリメント |
|
デクリメント |
|
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
ほとんどの比較演算は、プリミティブ型 int の場合と同じ方法で実行されます。
Integer a = 1;
Integer b = 2;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
出力:
false
false
true
true
2 つの整数変数を比較する操作が目立ちます。ここでのポイントは、Integer は参照データ型であり、その変数には値そのもの (オブジェクト) ではなく、値への参照が格納されるということです。この事実は、次のコード部分を実行すると確認できます。
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);
System.out.println(a == b); // true
System.out.println(a == c); // false
最初の等価性の結果は true になり、2 番目の等価性の結果は false になります。これは、最初のケースでは、同じオブジェクトへの参照を格納する 2 つの変数 (「a」と「b」) を比較するために発生します。2 番目のケースでは、2 つの異なるオブジェクトを参照する 2 つの変数を比較します (変数「c」を作成したときに、新しいオブジェクトを作成しました)。別の興味深い例を挙げてみましょう。
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a == b); // true
System.out.println(x == y); // false
ご覧のとおり、最初の比較の結果は true で、2 番目の比較の結果は false です。すべてはキャッシングに関するものです。-128 から 127 までの範囲のすべての整数 (これらの値はカスタマイズ可能) がキャッシュされます。したがって、新しい変数を作成して -128 ~ 127 の整数値を割り当てる場合、新しいオブジェクトを作成するのではなく、キャッシュ内にすでに作成されているオブジェクトへの参照を変数に割り当てます。さて、この事実を知ると、上の例はそれほど神秘的ではないようです。変数 a と b は同じオブジェクト、つまりキャッシュからのオブジェクトを参照します。そして、変数 x と y の初期化中に、毎回新しいオブジェクトを作成し、これらの変数には異なるオブジェクトへの参照が保存されました。そしてご存知のとおり、== 演算子は変数の値を比較し、参照変数の値は参照です。2 つの整数変数間の等価性を正確にチェックするには、(どんなに些細なことのように思えても)、equals メソッドを使用する必要があります。上の例を書き直してみましょう。
Integer a = 1;
Integer b = 1;
Integer x = 2020;
Integer y = 2020;
System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true
整数の自動パックとアンパック
自動梱包・開梱とは何ですか? 新しい整数変数を作成するときは、次の構造を使用しました。
Integer a = 2020;
このようにして、new キー演算子を使用せずに新しいオブジェクトを作成しました。これは、プリミティブ型 int の自動パッキング メカニズムのおかげで可能になります。プリミティブ int 変数を Integer 参照変数の値に割り当てる場合は、逆の手順が行われます。
Integer a = 2020;
int x = a;
この場合、参照 (つまり、オブジェクトへの参照は変数 "a" の値) をプリミティブ変数に割り当てたようです。しかし実際には、自動アンパック メカニズムのおかげで、値 2020 が「x」変数に書き込まれました。自動パック/アンパックは Java では非常に一般的な現象です。多くの場合、それは自動的に発生しますが、場合によってはプログラマーの知識がなくても発生します。しかし、この現象についてはまだ知っておく必要があります。このトピックに関する興味深い記事が Javarush にあります。
整数クラス定数
Integer クラスは、整数を操作するためのさまざまな定数とメソッドを提供します。このセクションでは、それらのいくつかを実際に詳しく見ていきます。定数から始めましょう。以下の表は、すべてのクラス定数を示しています。コスタンタ | 説明 |
---|---|
サイズ | int 型が占める 2 桁の数体系のビット数 |
バイト | int 型が占める 2 桁の数値体系のバイト数 |
MAX_VALUE | int型が保持できる最大値 |
MIN_VALUE | int型が保持できる最小値 |
タイプ | int型からClass型のオブジェクトを返します。 |
public static void main(String[] args) {
System.out.println(Integer.SIZE);
System.out.println(Integer.BYTES);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.TYPE);
}
結果として、次の出力が得られます。
32
4
2147483647
-2147483648
int
Integerクラスのメソッド
ここで、Integer クラスの最もよく使用されるメソッドを簡単に見てみましょう。したがって、「上位」の先頭には、文字列から数値を変換するメソッド、または数値から文字列を変換するメソッドが続きます。文字列を数値に変換することから始めましょう。parseIntメソッドはこれらの目的に使用されます。署名は次のとおりです。-
static int parseInt(String s)
int i = Integer.parseInt("10");
System.out.println(i); // 10
変換が不可能な場合 (たとえば、parseInt メソッドに単語を渡した場合)、NumberFormatException がスローされます。parseInt(String s) メソッドには、オーバーロードされた兄弟があります。
-
static int parseInt(String s, int radix)
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8)); // 8
System.out.println(Integer.parseInt("F", 16)); // 15
parseInt メソッドは、プリミティブ データ型 int を返します。これらのメソッドには、類似したvalueOfメソッドがあります。このメソッドの一部のバリエーションは、単に内部で parseInt を呼び出します。parseInt との違いは、valueOf の結果が int ではなく Integer になることです。以下で、このメソッドのすべてのオプションとその仕組みの例を検討してみましょう。
- static Integer valueOf(int i) - 値が i である整数を返します。
- static Integer valueOf(String s) - parseInt(String s) と似ていますが、結果は Integer になります。
- static Integer valueOf(String s, int radix) - parseInt(String s, int radix) と似ていますが、結果は Integer になります。
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);
System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
String を int/Integer に変換できるメソッドを調べました。逆の手順は、toStringメソッドを使用して実現されます。任意の Integer オブジェクトで toString メソッドを呼び出して、その文字列表現を取得できます。
Integer x = 5;
System.out.println(x.toString()); // 5
ただし、toString メソッドはオブジェクトに対して暗黙的に呼び出されることが多いため (たとえば、印刷のためにオブジェクトをコンソールに送信するとき)、開発者がこのメソッドを明示的に使用することはほとんどありません。また、静的メソッド toString もあり、これは int パラメータを受け取り、それを文字列表現に変換します。例えば:
System.out.println(Integer.toString(5)); // 5
ただし、非静的 toString メソッドと同様に、静的メソッドを明示的に使用することはまれです。さらに興味深いのは、2 つの整数パラメータを取る静的メソッド toString です。
- static String toString(int i, int radix) - i を基数体系の文字列表現に変換します。
System.out.println(Integer.toString(5, 2)); // 101
Integer クラスには、2 つの数値の最大値/最小値を見つけるためのメソッドがいくつかあります。
- static int max(int a, int b) は渡された変数の中で最大の値を返します。
- static int min(int a, int b) は、渡された変数の中で最小の値を返します。
int x = 4;
int y = 40;
System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4
結論
この記事では、Integer クラスについて説明しました。これはどのようなクラスなのか、ラッパークラスとは何なのかについて話しました。私たちは実践的な観点から授業を見ていきました。比較演算を含む算術演算の例を見ていきました。2 つの整数変数を比較する複雑さを調べ、キャッシュされたオブジェクトの概念を調べました。プリミティブ データ型の自動パッキング/アンパッキングの現象についても説明しました。さらに、Integer クラスのいくつかのメソッドといくつかの定数を確認することができました。彼らは、数値をある記数法から別の記数法に変換する例を示しました。宿題
-
他にどのような Integer クラスのメソッドがあるかを調べて (公式ドキュメントのある Web サイトで調べることができます)、自分が調べたメソッド (記事で挙げられているメソッドを除く) のどれがあなたの意見で最も役立つかをコメントに書きます (最も頻繁に使用されます)。そしてあなたの意見の理由も添えてください。
PS ここに正解はありませんが、このアクティビティにより、クラスをよりよく学ぶことができます。
-
材料を統合するための小さな単純な問題を解決します。
数字は 2 つあります。
1100001001 - 2 進数系
33332 - 5 進数系Integer クラスのメソッドのみを使用して、指定された 2 つの数値の最大値を決定し、その最大値と最小値の差を 3 進数系で表示する必要があります。
-
可能な最大の整数値を 8 進数体系に変換し、結果の数値の桁数を表示します (プログラムで数値を数えます)。
GO TO FULL VERSION