0Pricing
Java Academy · レッスン

プリミティブ型とラッパー型

Integer、Double、Booleanなどを学びます

「プリミティブ型とラッパー型」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

値の2つの世界

Javaには、int、double、booleanのように、値をそのまま直接保持するプリミティブ型があります。また、それらの値をオブジェクトの中に包む、Integer、Double、Booleanのようなラッパークラスもあります。

プリミティブ型は高速で軽量です。ラッパーは完全なオブジェクトなので、コレクションに格納でき、nullにもできます。

8つのプリミティブ型

Javaには、正確に8つのプリミティブ型が定義されています。

  • 整数にはbyte、short、int、long
  • 小数にはfloat、double
  • 1つの文字にはchar
  • trueまたはfalseにはboolean

それぞれに対応するラッパークラスがjava.langパッケージにあります。

対応するラッパー名

ほとんどのラッパー名はプリミティブ型の先頭を大文字にしたものですが、2つだけ異なります。

  • intはIntegerになります
  • charはCharacterになります
  • booleanはBoolean、doubleはDoubleになるなど、同様に変換されます

いくつかのラッパーを出力してみましょう。

public class Main {
    public static void main(String[] args) {
        Integer count = 42;
        Double price = 9.99;
        Boolean active = true;
        Character grade = 'A';
        System.out.println(count);
        System.out.println(price);
        System.out.println(active);
        System.out.println(grade);
    }
}

ラッパーはオブジェクトです

プリミティブ型は値を保持します。一方、ラッパーはオブジェクト参照なので、nullによって何も指さない状態にできます。

そのため、データベースのNULLを許可する列のように、値が存在しない場合があるときにラッパーが役立ちます。

public class Main {
    public static void main(String[] args) {
        Integer missing = null;
        int present = 5;
        System.out.println(missing);
        System.out.println(present);
    }
}

便利な定数

ラッパークラスには便利な定数が用意されています。Integer.MAX_VALUEとInteger.MIN_VALUEを使うと、intで表せる最大値と最小値を取得できます。

自分で数値を暗記するより、はるかに簡単です。

public class Main {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);
    }
}

ヘルパーメソッド

ラッパークラスは、staticなヘルパーメソッドを集めたツールボックスでもあります。たとえば、Integer.toBinaryStringは数値を2進数で表し、Integer.maxは2つの値のうち大きいほうを返します。

public class Main {
    public static void main(String[] args) {
        System.out.println(Integer.toBinaryString(10));
        System.out.println(Integer.max(7, 3));
        System.out.println(Integer.toHexString(255));
    }
}

コレクションにラッパーが必要な理由

Javaのジェネリクスは、プリミティブ型ではなくオブジェクトに対してのみ機能します。List<int>と書くことはできません。

代わりにList<Integer>を使用します。ラッパーによって、コレクションが必要とするオブジェクトの世界にプリミティブ値を適合させられます。

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(20);
        System.out.println(numbers);
    }
}

ラッパー値の比較

2つのラッパーの内部にある数値を比較するには、オブジェクト自体に算術演算子を使うのではなく、.equals()または.compareTo()を使用してください。

compareToは、負の数、0、または正の数を返します。

public class Main {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 200;
        System.out.println(a.equals(b));
        System.out.println(a.compareTo(b));
    }
}

メモリとパフォーマンス

プリミティブ型はオブジェクトのオーバーヘッドがないため、使用するメモリが少なく、より高速に動作します。1つのintは、わずか4バイトの生データです。

ラッパーオブジェクトには、追加のヘッダー情報が含まれます。数百万個の値を扱う処理量の多いループでは、プリミティブ型を優先してください。

デフォルト値は異なります

初期化されていないプリミティブ型のフィールドには、0に近い値がデフォルトで設定されます。intは0、booleanはfalseです。

初期化されていないラッパーのフィールドには、デフォルトでnullが設定されます。後で値を使おうとするとき、この違いが重要になります。

public class Main {
    static int primitiveField;
    static Integer wrapperField;

    public static void main(String[] args) {
        System.out.println(primitiveField);
        System.out.println(wrapperField);
    }
}

どちらを選ぶか

単純なルールがあります。パフォーマンスと明確さのため、基本的にはプリミティブ型を使用します。コレクションの要素、ジェネリック型、またはnullによって値が存在しないことを表す機能が必要な場合は、ラッパーに切り替えてください。

簡単な確認

プリミティブ型とラッパーについての理解度を確認しましょう。

まとめ

プリミティブ型とラッパーの違いについて学びました。

  • 8つのプリミティブ型は、IntegerやDoubleなど8つのラッパークラスに対応します
  • ラッパーはオブジェクトであり、nullにでき、コレクションに格納できます
  • プリミティブ型はより高速で軽量なので、基本的にこちらを使用します
  • ラッパークラスには便利な定数やヘルパーメソッドも用意されています

よくある質問

「プリミティブ型とラッパー型」レッスンは無料ですか?

はい。「プリミティブ型とラッパー型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「プリミティブ型とラッパー型」で何を学びますか?

Integer、Double、Booleanなどを学びます ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「プリミティブ型とラッパー型」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. プリミティブ型とラッパー型
  2. オートボクシングとアンボクシング
  3. パースとvalueOf
  4. オートボクシングの落とし穴
← Java Academyに戻る