Javaエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnetJava
  2. Javaコラム
  3. Java入門
  4. Javaのbyte型を基本から解説!byteとStringは相互に変換できる

Javaのbyte型を基本から解説!byteとStringは相互に変換できる

  • Java入門
公開日時:   更新日時:
Javaのbyte型を基本から解説!byteとStringは相互に変換できる
この記事でわかること
    システム
    エンジニア
    Javaのbyte型はどのように使用するのでしょうか。
    プロジェクト
    マネージャー
    byte型の使用目的はバイナリデータを扱うことです。

    Javaのbyte型とは?


    Javaのbyteはプリミティブ型(基本型)の一つで、-128~127までの範囲を持ちます。名前通りサイズは1バイトで、基本型の中ではbooleanの次にデータサイズが小さくなっています。byte型の使用目的はバイナリデータを扱うことです。

    バイナリデータとは人間が読めるテキストデータ等とは違い、人間が見ても分からない生のデータのことです。例えば画像ファイルをテキストエディタで無理矢理開くと、意味不明な文字の羅列が表示されますが、これがバイナリデータです。

    全てのデジタルなデータはbyte型

    より正しく言えば、画像データに限らず、コンピュータで扱う全てのデジタルなデータは数字で表されるバイナリデータです。よってバイナリを表すbyte型を知ることは、プログラミングの基本を学ぶ上で重要と言えるでしょう。

    JavaではString型の文字列もbyteで構成されています。そのため以下のようにbyte配列からString型の文字列を生成できます。

    byte[] ary = { 0x61, 0x62, 0x63, 0x64, 0x65 };
    System.out.println(new String(ary));

    実行結果は、

    abcde

    になります。

    byteとStringは相互に変換できる

    上のJavaサンプルの数値についている「0x」は16進数を表します。そしてaはUnicodeでは0x61で表されます。Java文字列はUnicodeのbyte型のデータで構成されているのです。逆に以下のように文字列をbyte型の配列に変換することもできます。

    byte[] ary = “”abcde””.getBytes();
    for (byte b : ary) {
    System.out.print(“” 0x””+Integer.toHexString(b));
    }

    結果は、

    0x61 0x62 0x63 0x64 0x65

    となります。なおfor文の中で16進数の変換を行わずにそのまま表示すると、

    System.out.print(“” “”+b);

    以下のように10進数で表示されます。

    97 98 99 100 101

    byte型の注意点

    Javaのbyte型は-128から127までの値しか取れません。その範囲を超えるとどうなるのでしょう。以下のJavaサンプルを実行してみてください。

    byte b = 127;
    b++; // 127に1を加算
    System.out.println(b);
    b–; // -128に1を減算
    System.out.println(b);

    結果は、

    -128
    127

    になります。127に1を加算すると-128になり、-128に-1を減算すると127になってしまいます。最大値と最小値がつながって、帯のようなループ状になっているということです。

    byte型変数にbyte以外の型の数値を代入した場合

    上のような結果は、byte型の変数に他の型の変数をキャストして代入する時にも表れます。以下のJavaサンプルをご覧ください。

    short s = 128;
    byte b = (byte)s;
    System.out.println(b);
    int i = 129;
    b = (byte)i;
    System.out.println(b);
    float f = 130.0f;
    b = (byte)f;
    System.out.println(b);
    double d = 131;
    b = (byte)d;
    System.out.println(b);

    byteよりサイズが大きい方に、byte型に入れられない128以上の数を(byte)でキャストして代入しています。結果は、

    -128
    -127
    -126
    -125

    となります。byteの範囲を超える数を入れると、最大なら最小、最小なら最大に値がはみでるということです。

    byte以外の型の変数にbyte型変数を代入した場合

    逆にbyte型の変数を他の型の変数に代入するとどうなるのでしょう。以下のJavaサンプルをご覧ください。

    byte b = 127;
    short s = b;
    System.out.println(s);
    int i = b;
    System.out.println(i);
    float f = b;
    System.out.println(f);
    double d = b;
    System.out.println(d);

    結果は以下になります。どの型もbyteよりサイズが大きいので、キャストも不要で問題なく変換できています。

    127
    127
    127.0
    127.0

    Byteクラスについて

    Javaには基本型のbyteの他に、Byteというクラスがあり、byte型の数値をクラスとしてラップしたい時に使用します。以下のJavaサンプルでは、-128というbyteの値からByteクラスのインスタンスを生成して、そこからbyteの値を取り出しています。

    Byte bObj = Byte.valueOf((byte)-128);
    byte b = bObj.byteValue();
    System.out.println(b);

    結果は以下になります。

    -128

    オートボクシングで代入するだけでByteクラスを生成できる

    Javaにはオートボクシングという基本型からクラスを生成する機能があります。以下のように値をByte型に代入するだけで、Byte型のインスタンスを生成できます。

    Byte bObj = -128;
    System.out.println(bObj.byteValue());

    Byte型のような基本型をラップするクラスは、他にもIntegerなどがあります。こういったクラスが役立つこととして、nullの状態を持たせることができるという点です。

    基本型は0や-1にもその値には意味があるので「無い」という状態としては扱えませんが、ラップするクラスの場合、nullなら「無い」という状態を表せます。

    Byteクラスならコレクションが使える

    他にByteクラスを使う理由は、以下のJavaサンプルのようにコレクションを使えるという点です。なお、これを実行する場合はソースの先頭に「import java.util.ArrayList;」が必要です。

    ArrayList list = new ArrayList();

    list.add(Byte.valueOf((byte)10));
    list.add(Byte.valueOf((byte)20));
    list.add(Byte.valueOf((byte)30));

    for (Byte b : list) {
    System.out.println(b.byteValue());
    }

    結果は以下になります。

    10
    20
    30

    このサンプルと同じことは配列でもできますが、ArrayListを使えば検索やソートなどの様々な機能を使うことが可能です。

    Byteクラスの比較の方法

    Byte型同士を比較する場合は、以下のように==ではなくequalsメソッドを使用します。==を使うと中身の値の比較ではなく、参照のアドレスが等しいかどうかという別の意味になってしまいます。

    Byte a = Byte.valueOf((byte)10);
    Byte b = Byte.valueOf((byte)10);
    if (a.equals(b)) System.out.println(“”値が等しいです。””);

    Byte型同士の大小を比較する場合は、以下のようにcompareToを使用します。

    System.out.println(“”compareToの結果””+a.compareTo(b));
    System.out.println(“”compareToの結果””+a.compareTo(Byte.valueOf((byte)8)));
    System.out.println(“”compareToの結果””+a.compareTo(Byte.valueOf((byte)12)));

    実行結果は以下のように、差分が表示されます。

    compareToの結果0
    compareToの結果2
    compareToの結果-2

    システム
    エンジニア
    Javaのbyteのことがよく理解できました。
    プロジェクト
    マネージャー
    Javaのbyteはブログラミングをする上での基本です。バイナリデータを扱う前にバイナリを表すbyte型の使い方を知っておきましょう。

    byte型は全てのデータの基本

    Javaのbyteについて解説しましたが、ご理解頂けましたでしょうか。全てのデジタルデータはバイナリデータで表され、それはbyte型として処理することができます。

    また、byteを知ることはプログラミングの基本を知ることになります。ここで紹介したことを活用して、ぜひJavaのbyteをマスターしてください。

    FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Java新着案件New Job