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
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)