1.Integer
クラス
Integer
また、クラスであるという点でも優れています。つまり、フィールドとメソッドを持つことができます。そしてもちろん、それらも備えています。それらの多くは、数十個です。ここでは最も基本的なものについて考えていきます。
このInteger
クラスには、型の最大値と最小値を含む 2 つのフィールドがありますint
。
分野 | 説明 |
---|---|
|
int 型の最大値 |
|
int 型の最小値 |
int
可能な最小値または最大値を変数に割り当てたい場合があります。理解できない定数でコードが乱雑になるのを避けるために、次のように非常に明確に記述することができます。
コード | 説明 |
---|---|
|
|
このInteger
クラスには興味深いメソッドもいくつかあります。どうぞ:
メソッド | 説明 |
---|---|
|
数値を 16 進数で表現した文字列を返します。 |
|
数値のバイナリ表現である文字列を返します。 |
|
数値を 8 進数で表現した文字列を返します。 |
|
渡されたものをオブジェクトint でラップしますInteger |
|
渡された文字列から取得した数値を返します |
以前に静的Integer.parseInt()
メソッドを使用しました。それがどのように機能するかを思い出してみましょう。
int name = Integer.parseInt(string);
数値 (数字のみ) を含む文字列がメソッドに渡されるとparseInt()
、その文字列が解析され、その文字列に含まれる数値が返されます。
残りのメソッドも便利です。たとえば、それらの中には、渡された数値を、その数値の 2 進数、8 進数、または 16 進数表現を含む文字列に変換できるものもあります。
2.Double
クラス
一般に、このDouble
クラスは クラスに似ていますが、ではなくInteger
をラップする点が異なります。私たちにとって興味深いフィールドやメソッドも含まれています。そのうちのいくつかを考えてみましょう。double
int
このDouble
クラスには 6 つの興味深いフィールドがあります。
分野 | 説明 |
---|---|
|
負の無限大 |
|
正の無限大 |
|
可能な最小の指数 (2 x ) |
|
可能な最大の指数 (2 x ) |
|
double 型の最小値 |
|
double 型の最大値 |
無限大
-1.0
で割ると0.0
負の無限大になります。1.0
で割ると0.0
、正の無限大になります。a をゼロで除算できるだけでなくdouble
、これらの演算の結果を保存することもできます。
の指数double
指数を理解するのは簡単です。内部的には、double は仮数と指数で構成されます。しかし、ここでの指数の値は ではなく、 です。したがって、指数が だけ増加すると、数値の合計値は 2 倍になります。10x
2x
1
MIN_EXPONENT == -1024
、これは を意味し、ほぼ等しい2-1024
10-308
そしてもちろん、このDouble
クラスには興味深いメソッドがあります。
メソッド | 説明 |
---|---|
|
数値を 16 進数で表現した文字列を返します。 |
|
渡された数値が無限大かどうかを確認します。 |
|
渡された番号がNaN |
|
渡されたものをオブジェクトdouble でラップしますDouble |
|
渡された文字列から取得した数値を返します |
興味深いことに、渡された数値が正または負の無限大である場合にisInfinite()
返すメソッドがあります。true
メソッドisNaN()
も同様で、渡された数値がNaN
( Not-a-Number、未定義の値を示す特別な定数) かどうかをチェックします。
3.Character
クラス
このCharacter
クラスの主な興味深い点は、文字がさまざまなカテゴリに属しているかどうかを確認できる静的ユーティリティ メソッドが多数あることです。
例
メソッド | 説明 |
---|---|
|
文字がアルファベットかどうかを確認します |
|
文字が文字であるかどうかを確認します |
|
文字が数字かどうかを確認します |
|
文字がスペース、改行、または改ページであるかどうかを確認します (コード: 12、13、14) |
|
文字が空白類(スペース、タブなど)であるかどうかを確認します。 |
|
文字が小文字かどうかを確認します |
|
文字が大文字かどうかを確認します |
|
文字を小文字に変換します |
|
文字を大文字に変換します |
これらの方法の特徴は、既知のすべてのアルファベットで機能することです。アラビア数字は数字などとして分類されます。
4.Boolean
クラス
タイプBoolean
はほぼ同じですboolean
。違いは最小限です。
以下に、クラスの簡略化されたバージョンを示しますBoolean
。
コード | 説明 |
---|---|
|
定数: TRUE иFALSE 変数 Boolean クラス コンストラクター このメソッドは内部変数の値を返します。 この静的メソッドはと に変換 true します。 TRUE false FALSE |
このBoolean
型には 2 つの定数 (2 つのフィールド) があります。
クラスの定数 | ブール型に相当するもの | 説明 |
---|---|---|
|
|
真実 |
|
|
間違い |
型を操作するのと同じ方法でそれらを操作できますboolean
。
コード | ノート |
---|---|
|
このBoolean クラスは、条件内に記述できる唯一のクラスです。 |
|
true 3 つの変数はすべて/に等しいTRUE |
|
両方を使用して定数を比較できequals 、== これも機能します。 |
ここではオートボクシングがうまく機能します。つまり、この型は と同じ方法で使用できboolean
、注意すべき落とし穴はありません。
どのように書かれているか | 使い方 |
---|---|
|
|
boolean
ここではと の型の比較を示しますBoolean
。
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
本当に独立したオブジェクトが必要な場合はBoolean
、それを明示的に作成する必要があります。
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
Boolean
もう 1 つの例では、の内部を使用しますif
。
コード | ノート |
---|---|
|
これはコンパイルして機能します |
これはコンパイルされますが、機能しません。
コード | ノート |
---|---|
|
エラー。この行は例外をスローします |
5. オートボクシング中の値のキャッシュ
整数ラッパー型に関連する落とし穴がいくつかあります。
すでにご存知のとおり、 anint
と anを比較するとInteger
、 はInteger
に変換されますint
。
どのように書かれているか | 使い方 |
---|---|
|
|
Integer
2 つのオブジェクトを相互に比較する場合、それらは に変換されませんint
。
コード | コンソール出力 |
---|---|
|
|
a == c
と、しかし、なぜなら、と を比較するときは参照を比較しているからです。これは本質的に私たちが期待していることです。b == c
a != b
a
b
サプライズ
500
しかし、に置き換えると100
、まったく異なる結果が得られます。
コード | コンソール出力 |
---|---|
|
|
ここでの問題は、オートボクシング中に新しいInteger
オブジェクトが実際に作成されるとは限らないことです。オブジェクトは、包括的な値に対してキャッシュされ-128
ます127
。
このInteger
クラスには、オブジェクトを格納する隠し配列があります: Integer(-128)
、Integer(-127)
、 ... Integer(126)
、Integer(127)
と記述するとInteger x = 128
、オートボクシング プロセスは新しいオブジェクトを作成しますが、 と記述するとInteger x = 127
、オートボクシング プロセスはキャッシュ (配列) から既存のオブジェクトを取得します。
Integer
オブジェクトをキャッシュから取得したくない場合は、次のように記述してオブジェクトを明示的に作成する必要があります。Integer x = new Integer(127);
すべてのラッパー タイプには次のようなキャッシュがあります: Integer
、Long
、Byte
、Short
、Boolean
。このBoolean
型の場合、そのTRUE
とFALSE
値は両方とも定数であるため、これらも基本的にキャッシュされます。
GO TO FULL VERSION