[Java] Shortラッパークラスの使い方

JavaのShortラッパークラスは、プリミティブ型shortをオブジェクトとして扱うためのクラスです。

Shortクラスを使用することで、short型の値をコレクションに格納したり、メソッドの引数として渡したりできます。

Shortクラスには、short型の値を比較するためのcompareToメソッドや、文字列をshortに変換するparseShortメソッドshortを文字列に変換するtoStringメソッドなどが用意されています。

また、ShortクラスNumberクラスを継承しているため、intValuedoubleValueなどのメソッドも利用可能です。

この記事でわかること
  • Shortラッパークラスの基本的な使い方とプリミティブ型shortとの違い
  • Shortラッパークラスの利点と注意点
  • コレクションやメソッドの引数としてのShortラッパークラスの活用方法
  • データベースやネットワーク通信、ファイル入出力でのShortラッパークラスの応用例

目次から探す

Shortラッパークラスとは

Shortラッパークラスの概要

JavaのShortラッパークラスは、プリミティブ型のshortをオブジェクトとして扱うためのクラスです。

java.langパッケージに含まれており、short型の値をラップすることで、オブジェクトとしての操作が可能になります。

これにより、コレクションフレームワークなど、オブジェクトが必要な場面でshort型を利用することができます。

プリミティブ型shortとの違い

スクロールできます
特徴プリミティブ型 shortShortラッパークラス
メモリ使用量少ない多い(オブジェクトのため)
初期値0null(オブジェクトのため)
使用場面基本的な数値演算コレクションやジェネリクスでの使用

プリミティブ型のshortは、メモリ効率が良く、基本的な数値演算に適しています。

一方、Shortラッパークラスは、オブジェクトとして扱えるため、コレクションやジェネリクスを使用する際に便利です。

ただし、オブジェクトであるため、メモリ使用量が増加し、初期値がnullになる点に注意が必要です。

ラッパークラスの利点

Shortラッパークラスには、以下のような利点があります。

  • オブジェクトとしての操作: short型をオブジェクトとして扱えるため、コレクションフレームワークやジェネリクスでの使用が可能です。
  • ユーティリティメソッドの利用: Shortクラスには、数値変換や比較を行うための便利なメソッドが多数用意されています。

例:Short.parseShort(String s)で文字列をshortに変換できます。

  • オートボクシングとアンボクシング: Javaのオートボクシング機能により、プリミティブ型とラッパークラス間の変換が自動で行われるため、コードが簡潔になります。

これらの利点により、Shortラッパークラスは、Javaプログラミングにおいて柔軟で便利なツールとなっています。

Shortラッパークラスの基本的な使い方

Shortオブジェクトの生成

Shortラッパークラスのオブジェクトを生成するには、以下のようにコンストラクタを使用します。

また、オートボクシングを利用して、プリミティブ型shortから自動的にShortオブジェクトを生成することも可能です。

// App.java
public class App {
    public static void main(String[] args) {
        // コンストラクタを使用してShortオブジェクトを生成
        Short shortObj1 = new Short((short) 10);
        
        // オートボクシングを使用してShortオブジェクトを生成
        Short shortObj2 = 20; // 自動的にShortオブジェクトに変換される
        System.out.println("shortObj1: " + shortObj1);
        System.out.println("shortObj2: " + shortObj2);
    }
}
shortObj1: 10
shortObj2: 20

この例では、Shortクラスのコンストラクタとオートボクシングを使って、Shortオブジェクトを生成しています。

Shortクラスのメソッド

Shortクラスには、数値の変換や比較を行うための便利なメソッドが用意されています。

以下に代表的なメソッドを紹介します。

parseShortメソッドの使い方

parseShortメソッドは、文字列をshort型に変換するために使用します。

// App.java
public class App {
    public static void main(String[] args) {
        // 文字列をshortに変換
        short value = Short.parseShort("123");
        System.out.println("Parsed short value: " + value);
    }
}
Parsed short value: 123

このメソッドは、文字列をshort型に変換する際に便利です。

数値以外の文字列を渡すとNumberFormatExceptionが発生するため、注意が必要です。

toStringメソッドの使い方

toStringメソッドは、Shortオブジェクトの値を文字列として取得するために使用します。

// App.java
public class App {
    public static void main(String[] args) {
        Short shortObj = 45;
        // Shortオブジェクトを文字列に変換
        String strValue = shortObj.toString();
        System.out.println("String value: " + strValue);
    }
}
String value: 45

このメソッドは、Shortオブジェクトの値を文字列として表示したい場合に役立ちます。

compareToメソッドの使い方

compareToメソッドは、2つのShortオブジェクトを比較するために使用します。

// App.java
public class App {
    public static void main(String[] args) {
        Short shortObj1 = 10;
        Short shortObj2 = 20;
        
        // Shortオブジェクトを比較
        int result = shortObj1.compareTo(shortObj2);
        
        if (result < 0) {
            System.out.println("shortObj1 is less than shortObj2");
        } else if (result > 0) {
            System.out.println("shortObj1 is greater than shortObj2");
        } else {
            System.out.println("shortObj1 is equal to shortObj2");
        }
    }
}
shortObj1 is less than shortObj2

このメソッドは、Shortオブジェクト同士を比較し、大小関係を判定する際に使用します。

結果が負の値であれば、呼び出し元のオブジェクトが引数より小さいことを示します。

Shortラッパークラスの活用例

コレクションでの使用

Shortラッパークラスは、コレクションフレームワークでshort型の値を扱う際に非常に便利です。

プリミティブ型のshortは直接コレクションに格納できないため、ラッパークラスを使用します。

// App.java
import java.util.ArrayList;
import java.util.List;
public class App {
    public static void main(String[] args) {
        // Shortオブジェクトをリストに格納
        List<Short> shortList = new ArrayList<>();
        shortList.add((short) 10);
        shortList.add((short) 20);
        shortList.add((short) 30);
        // リストの内容を表示
        for (Short s : shortList) {
            System.out.println("Value: " + s);
        }
    }
}
Value: 10
Value: 20
Value: 30

この例では、ArrayListShortオブジェクトを格納し、リストの内容を表示しています。

Shortラッパークラスを使用することで、コレクションにshort型の値を簡単に格納できます。

メソッドの引数としての使用

Shortラッパークラスは、メソッドの引数としてshort型の値をオブジェクトとして渡す際に役立ちます。

これにより、メソッド内でオブジェクトとしての操作が可能になります。

// App.java
public class App {
    public static void main(String[] args) {
        Short value = 15;
        printShortValue(value);
    }
    // Shortオブジェクトを引数として受け取るメソッド
    public static void printShortValue(Short value) {
        System.out.println("Short value: " + value);
    }
}
Short value: 15

この例では、Shortオブジェクトをメソッドの引数として渡し、メソッド内でその値を表示しています。

Shortラッパークラスを使用することで、メソッド間でのデータの受け渡しが柔軟になります。

数値変換のユーティリティとしての使用

Shortラッパークラスは、文字列からshort型への変換や、short型から文字列への変換を行うユーティリティとしても活用できます。

// App.java
public class App {
    public static void main(String[] args) {
        // 文字列をshortに変換
        short parsedValue = Short.parseShort("100");
        System.out.println("Parsed short: " + parsedValue);
        // shortを文字列に変換
        String strValue = Short.toString(parsedValue);
        System.out.println("String value: " + strValue);
    }
}
Parsed short: 100
String value: 100

この例では、ShortクラスparseShortメソッドを使用して文字列をshort型に変換し、toStringメソッドを使用してshort型を文字列に変換しています。

これにより、数値データの変換が簡単に行えます。

Shortラッパークラスの注意点

オートボクシングとアンボクシング

Javaでは、プリミティブ型とラッパークラスの間で自動的に変換が行われるオートボクシングとアンボクシングの機能があります。

これにより、short型Shortオブジェクトの間での変換が簡単になりますが、注意が必要です。

// App.java
public class App {
    public static void main(String[] args) {
        // オートボクシング
        Short shortObj = 10; // プリミティブ型shortがShortオブジェクトに自動変換
        // アンボクシング
        short primitiveShort = shortObj; // Shortオブジェクトがプリミティブ型shortに自動変換
        System.out.println("Short object: " + shortObj);
        System.out.println("Primitive short: " + primitiveShort);
    }
}
Short object: 10
Primitive short: 10

オートボクシングとアンボクシングは便利ですが、頻繁に行われるとパフォーマンスに影響を与える可能性があります。

特にループ内での使用には注意が必要です。

NullPointerExceptionのリスク

Shortラッパークラスはオブジェクトであるため、nullを許容します。

しかし、nullの状態でアンボクシングを行うとNullPointerExceptionが発生するリスクがあります。

// App.java
public class App {
    public static void main(String[] args) {
        Short shortObj = null;
        try {
            // アンボクシングでNullPointerExceptionが発生
            short primitiveShort = shortObj;
        } catch (NullPointerException e) {
            System.out.println("NullPointerException occurred: " + e.getMessage());
        }
    }
}
NullPointerException occurred: null

この例では、Shortオブジェクトがnullの状態でアンボクシングを行おうとしたため、NullPointerExceptionが発生しています。

nullチェックを行うことで、このリスクを回避できます。

パフォーマンスへの影響

Shortラッパークラスはオブジェクトであるため、プリミティブ型に比べてメモリ使用量が多く、パフォーマンスに影響を与える可能性があります。

特に、大量のデータを扱う場合や頻繁にオートボクシングとアンボクシングを行う場合は注意が必要です。

  • メモリ使用量: プリミティブ型のshortは2バイトですが、Shortオブジェクトはオブジェクトヘッダを含むため、より多くのメモリを消費します。
  • パフォーマンス: オートボクシングとアンボクシングは、暗黙的なオブジェクト生成と変換を伴うため、パフォーマンスに影響を与えることがあります。

これらの点を考慮し、必要に応じてプリミティブ型とラッパークラスを使い分けることが重要です。

Shortラッパークラスの応用例

データベースとの連携

Shortラッパークラスは、データベースとの連携においても役立ちます。

JDBCを使用してデータベースからshort型のデータを取得し、Shortオブジェクトとして扱うことができます。

// App.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class App {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String user = "username";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            String query = "SELECT short_column FROM my_table WHERE id = ?";
            PreparedStatement pstmt = conn.prepareStatement(query);
            pstmt.setInt(1, 1);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                // データベースからshort型のデータを取得
                Short shortValue = rs.getShort("short_column");
                System.out.println("Short value from database: " + shortValue);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

この例では、JDBCを使用してデータベースからshort型のデータを取得し、Shortオブジェクトとして扱っています。

データベースのカラムがshort型である場合、getShortメソッドを使用してデータを取得できます。

ネットワーク通信での使用

Shortラッパークラスは、ネットワーク通信においても利用されます。

short型のデータを送受信する際に、Shortオブジェクトを使用してデータをラップし、シリアライズやデシリアライズを行うことができます。

// App.java
import java.io.*;
import java.net.*;
public class App {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(12345)) {
            Socket clientSocket = serverSocket.accept();
            DataInputStream in = new DataInputStream(clientSocket.getInputStream());
            DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
            // クライアントからshort型のデータを受信
            short receivedShort = in.readShort();
            System.out.println("Received short: " + receivedShort);
            // Shortオブジェクトを使用してデータを送信
            Short shortToSend = 42;
            out.writeShort(shortToSend);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

この例では、サーバーソケットを使用してクライアントからshort型のデータを受信し、Shortオブジェクトを使用してデータを送信しています。

ネットワーク通信でshort型のデータを扱う際に、Shortラッパークラスを利用することで、データのラップが容易になります。

ファイル入出力での使用

Shortラッパークラスは、ファイル入出力においても活用できます。

short型のデータをファイルに書き込んだり、ファイルから読み込んだりする際に、Shortオブジェクトを使用してデータをラップすることができます。

// App.java
import java.io.*;
public class App {
    public static void main(String[] args) {
        String fileName = "shortData.dat";
        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(fileName))) {
            // Shortオブジェクトを使用してデータを書き込む
            Short shortToWrite = 123;
            dos.writeShort(shortToWrite);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try (DataInputStream dis = new DataInputStream(new FileInputStream(fileName))) {
            // ファイルからshort型のデータを読み込む
            short readShort = dis.readShort();
            System.out.println("Read short from file: " + readShort);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

この例では、DataOutputStreamを使用してShortオブジェクトをファイルに書き込み、DataInputStreamを使用してファイルからshort型のデータを読み込んでいます。

ファイル入出力でshort型のデータを扱う際に、Shortラッパークラスを利用することで、データのラップが容易になります。

よくある質問

Shortとshortのどちらを使うべきか?

Shortshortのどちらを使用するかは、用途によって異なります。

以下のポイントを考慮して選択してください。

  • メモリ効率: shortはプリミティブ型であり、メモリ効率が良いため、数値演算や大量のデータを扱う場合に適しています。
  • オブジェクトとしての操作: Shortはラッパークラスであり、オブジェクトとして扱えるため、コレクションフレームワークやジェネリクスを使用する場合に便利です。
  • nullの許容: Shortはオブジェクトであるため、nullを許容します。

nullを扱う必要がある場合はShortを使用します。

例:List<Short> shortList = new ArrayList<>();(コレクションで使用する場合)

Shortラッパークラスはスレッドセーフですか?

Shortラッパークラス自体は不変オブジェクトであり、スレッドセーフです。

つまり、Shortオブジェクトの状態は変更されないため、複数のスレッドから同時にアクセスしても安全です。

ただし、Shortオブジェクトを含むコレクションやデータ構造がスレッドセーフであるかどうかは別の問題です。

スレッドセーフなコレクションを使用する場合は、Collections.synchronizedListjava.util.concurrentパッケージのクラスを検討してください。

Shortクラスの最大値と最小値は?

Shortクラスの最大値と最小値は、Short.MAX_VALUEShort.MIN_VALUEで定義されています。

  • 最大値: Short.MAX_VALUEは32767です。
  • 最小値: Short.MIN_VALUEは-32768です。

これらの定数を使用することで、short型の範囲を超えないようにプログラムを設計することができます。

例:if (value > Short.MAX_VALUE) { /* エラーハンドリング */ }

まとめ

この記事では、JavaのShortラッパークラスについて、その基本的な使い方や活用例、注意点を詳しく解説しました。

Shortラッパークラスは、プリミティブ型のshortをオブジェクトとして扱うための便利なツールであり、コレクションやメソッドの引数としての使用、数値変換のユーティリティとしての活用が可能です。

また、オートボクシングとアンボクシングの仕組みや、NullPointerExceptionのリスク、パフォーマンスへの影響についても触れ、実際のプログラミングにおける注意点を示しました。

これを機に、Shortラッパークラスを活用して、より効率的で安全なJavaプログラミングに挑戦してみてはいかがでしょうか。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 言語仕様 (28)
  • URLをコピーしました!
目次から探す