1.Integerクラス

Integerまた、クラスであるという点でも優れています。つまり、フィールドとメソッドを持つことができます。そしてもちろん、それらも備えています。それらの多くは、数十個です。ここでは最も基本的なものについて考えていきます。

このIntegerクラスには、型の最大値と最小値を含む 2 つのフィールドがありますint

分野 説明
Integer.MAX_VALUE
int型の最大値
Integer.MIN_VALUE
int型の最小値

int可能な最小値または最大値を変数に割り当てたい場合があります。理解できない定数でコードが乱雑になるのを避けるために、次のように非常に明確に記述することができます。

コード 説明
int min = Integer.MIN_VALUE;
min == 0x80000000

このIntegerクラスには興味深いメソッドもいくつかあります。どうぞ:

メソッド 説明
String Integer.toHexString(int)
数値を 16 進数で表現した文字列を返します。
String Integer.toBinaryString(int)
数値のバイナリ表現である文字列を返します。
String Integer.toOctalString(int)
数値を 8 進数で表現した文字列を返します。
Integer Integer.valueOf(int i)
渡されたものをオブジェクトintでラップしますInteger
Integer Integer.parseInt(String)
渡された文字列から取得した数値を返します

以前に静的Integer.parseInt()メソッドを使用しました。それがどのように機能するかを思い出してみましょう。

int name = Integer.parseInt(string);

数値 (数字のみ) を含む文字列がメソッドに渡されるとparseInt()、その文字列が解析され、その文字列に含まれる数値が返されます。

残りのメソッドも便利です。たとえば、それらの中には、渡された数値を、その数値の 2 進数、8 進数、または 16 進数表現を含む文字列に変換できるものもあります。



2.Doubleクラス

一般に、このDoubleクラスは クラスに似ていますが、ではなくIntegerをラップする点が異なります。私たちにとって興味深いフィールドやメソッドも含まれています。そのうちのいくつかを考えてみましょう。doubleint

このDoubleクラスには 6 つの興味深いフィールドがあります。

分野 説明
double Double.NEGATIVE_INFINITY
負の無限大
double Double.POSITIVE_INFINITY
正の無限大
int Double.MIN_EXPONENT
可能な最小の指数 (2 x )
int Double.MAX_EXPONENT
可能な最大の指数 (2 x )
double Double.MIN_VALUE
double型の最小値
double Double.MAX_VALUE
double型の最大値

無限大

-1.0で割ると0.0負の無限大になります。1.0で割ると0.0、正の無限大になります。a をゼロで除算できるだけでなくdouble、これらの演算の結果を保存することもできます。

の指数double

指数を理解するのは簡単です。内部的には、double は仮数と指数で構成されます。しかし、ここでの指数の値は ではなく、 です。したがって、指数が だけ増加すると、数値の合計値は 2 倍になります。10x2x1

MIN_EXPONENT == -1024、これは を意味し、ほぼ等しい2-102410-308

そしてもちろん、このDoubleクラスには興味深いメソッドがあります。

メソッド 説明
String Double.toHexString(double)
数値を 16 進数で表現した文字列を返します。
boolean Double.isInfinite(double)
渡された数値が無限大かどうかを確認します。
boolean Double.isNaN(double)
渡された番号がNaN
Double Double.valueOf(double)
渡されたものをオブジェクトdoubleでラップしますDouble
Double Double.parseDouble(String)
渡された文字列から取得した数値を返します

興味深いことに、渡された数値が正または負の無限大である場合にisInfinite()返すメソッドがあります。true

メソッドisNaN()も同様で、渡された数値がNaN( Not-a-Number、未定義の値を示す特別な定数) かどうかをチェックします。



3.Characterクラス

このCharacterクラスの主な興味深い点は、文字がさまざまなカテゴリに属しているかどうかを確認できる静的ユーティリティ メソッドが多数あることです。

メソッド 説明
Character.isAlphabetic(int)
文字がアルファベットかどうかを確認します
Character.isLetter(char)
文字が文字であるかどうかを確認します
Character.isDigit(char)
文字が数字かどうかを確認します
Character.isSpaceChar(char)
文字がスペース、改行、または改ページであるかどうかを確認します (コード: 12、13、14)
Character.isWhitespace(char)
文字が空白類(スペース、タブなど)であるかどうかを確認します。
Character.isLowerCase(char)
文字が小文字かどうかを確認します
Character.isUpperCase(char)
文字が大文字かどうかを確認します
Character.toLowerCase(char)
文字を小文字に変換します
Character.toUpperCase(char)
文字を大文字に変換します

これらの方法の特徴は、既知のすべてのアルファベットで機能することです。アラビア数字は数字などとして分類されます。



4.Booleanクラス

タイプBooleanはほぼ同じですboolean。違いは最小限です。

以下に、クラスの簡略化されたバージョンを示しますBoolean

コード 説明
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


定数: TRUEиFALSE


変数

Booleanクラス コンストラクター




このメソッドは内部変数の値を返します。



この静的メソッドはと に変換trueします。 TRUEfalseFALSE

このBoolean型には 2 つの定数 (2 つのフィールド) があります。

クラスの定数 ブール型に相当するもの 説明
Boolean.TRUE
true
真実
Boolean.FALSE
false
間違い

型を操作するのと同じ方法でそれらを操作できますboolean

コード ノート
if (Boolean.TRUE)
{
}
このBooleanクラスは、条件内に記述できる唯一のクラスです。
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean c = true;
true3 つの変数はすべて/に等しいTRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
両方を使用して定数を比較できequals==

これも機能します。

ここではオートボクシングがうまく機能します。つまり、この型は と同じ方法で使用できboolean、注意すべき落とし穴はありません。

どのように書かれているか 使い方
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

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

コード ノート
Boolean less = (2 < 3);
if (less)
{
   ...
}
これはコンパイルして機能します

これはコンパイルされますが、機能しません。

コード ノート
Boolean less = null;
if (less)
{
   ...
}

エラー。この行は例外をスローします


5. オートボクシング中の値のキャッシュ

整数ラッパー型に関連する落とし穴がいくつかあります。

すでにご存知のとおり、 anintと anを比較するとInteger、 はIntegerに変換されますint

どのように書かれているか 使い方
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Integer2 つのオブジェクトを相互に比較する場合、それらは に変換されませんint

コード コンソール出力
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




false
true
true

a == cと、しかし、なぜなら、と を比較するときは参照を比較しているからです。これは本質的に私たちが期待していることです。b == ca != bab

サプライズ

500しかし、に置き換えると100、まったく異なる結果が得られます。

コード コンソール出力
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




true
true
true

ここでの問題は、オートボクシング中に新しいIntegerオブジェクトが実際に作成されるとは限らないことです。オブジェクトは、包括的な値に対してキャッシュされ-128ます127

このIntegerクラスには、オブジェクトを格納する隠し配列があります: Integer(-128)Integer(-127)、 ... Integer(126)Integer(127)

と記述するとInteger x = 128、オートボクシング プロセスは新しいオブジェクトを作成しますが、 と記述するとInteger x = 127、オートボクシング プロセスはキャッシュ (配列) から既存のオブジェクトを取得します。

Integerオブジェクトをキャッシュから取得したくない場合は、次のように記述してオブジェクトを明示的に作成する必要があります。Integer x = new Integer(127);

すべてのラッパー タイプには次のようなキャッシュがあります: IntegerLongByteShortBoolean。このBoolean型の場合、そのTRUEFALSE値は両方とも定数であるため、これらも基本的にキャッシュされます。