バナー画像

プリミティブ型と参照型

Javaのデータ型には大きく分類して、プリミティブ型と参照型があります。

プリミティブ型は基本型とも呼び、次の8種類の型があります。

分類
真偽型 boolean
整数型 byte, short, int, long
浮動小数点型 float, double
文字型 char

 

参照型はクラス型とも言い、クラスのインスタンス(実態)を格納します。

例えば、次のような自作クラスも参照型となり、そのクラスのインスタンスを格納する変数は、参照型の変数となります。

public class User {
   private String nama;
   private int age;

   public String getNama() {
       return nama;
   }
   public void setNama(String nama) {
       this.nama = nama;
   }
   public int getAge() {
       return age;
   }
   public void setAge(int age) {
       this.age = age;
   }


   public static void main(String[] args) {
       User user = new User(); //Userクラスを格納する参照型の変数
   }
}

この記事では、Javaのプリミティブ型(基本型)について詳しく解説していきます。

プリミティブ型は、まさにJavaの基本になるため、しっかり覚えておきましょう。

整数型

整数型は、その名の通り整数値を扱う型です。Javaの整数型には、次の4つがあります。

値の範囲
byte -128~127
short -32768~32767
int -2147483648~2147483647
long -9223372036854775808~9223372036854775807

 

リテラルで整数型の値を書くときは、通常は10進表記で書きますが、接頭辞として0b、0、0xを付与すると、2進数、8進数、16進数表記でも書けます。

例えば、整数の100をそれぞれの進数で表記すると、次のようになります。

int int2 = 0b1100100;
int int8 = 0144;
int int16 = 0x64;

また、桁区切り文字として「_」を使用することもできます。

int i = 199_999;

リテラでの型

リテラルで整数値を書く場合、特に何も指定しないとint型として扱われます。

int i = 100000;

リテラルを、shortやlongとして扱う場合、末尾に型を指定する記号を付けます。

System.out.println(a.getClass().getName());
=> java.lang.Integer

浮動小数点型

浮動小数点型は、小数を含む数値を扱うクラスです。Javaの浮動小数点型には次の2つがあります。

値の範囲
float -1.4E-45〜約340澗(かん)
double -4.9E-324〜約1.7澗(かん)

 

誤差には注意

上の表の通り、floatは4バイト、doubleは8バイトの値の範囲を扱え、広い範囲の数値でも高速に計算がてきます。しかし、その速さとの引き換えに、計算結果に誤差が生まれることがあり、注意が必要です。

次のサンプルコードは、double型の計算結果て、実際に誤差が生じる例です。

double diff = 0.1;
double sum = 0;

for (int i = 0; i < 10; i++) {
    sum += diff;
}

System.out.println(sum); 

上のコードでは、「0.1」をsum変数に10回足しています。結果は「1.0」になりそうですが、実際に実際に実行してみると、「0.99999…」のような結果となり、結果に誤差が発生します。

コンピュータでは、数値を内部では2進数で扱っているため、2進数で表現できない小数(循環小数)の場合、適当な値に丸められ、その結果、上記のサンプルコードのような誤差が発生します。

Java以外でも浮動小数点の誤差は発生する

Javaの浮動小数点型は、国際標準規格に準拠している為、その他のプログラム言語でも、規約に準拠していれば、同じように誤差が発生します。Javaに限らす、浮動小数点型の計算する場合は、誤差については注意しましょう。

文字型

char型は、1つの文字を表すデータ型です。内部的にはunicodeて16ビットの整数(0~65535)として文字を表現します。

charのリテラルは、シングルクォートで括って書くか、uxxxxの形式で文字コード指定で書くこともできます。

Stringは基本データ型ではない

皆さんは、文字をプログラムで扱うとき、charよりもStringをよく使うと思います。Stringはよく使うデータ型ですが、Javaではプリミティブ(基本)型ではなく、参照型に位置づけられています。

真偽型(boolean)

真偽型はtrueとfalseの2つ値を表現するデータ型です。trueとfalse以外の値は入りません。

trueが「真」、falseが「偽」と覚えておいてください。

真偽型(boolean)は、例えばチェックボックスのON/OFF状態などの値を格納するのに適したデータ型です。

データ型の変換

ある型から、別の型にデータ。変換することをキャストといいます。

キャストをすれば、intをdouble型に変換するなど、別のプリミティブ型へデータを変換できます。

構文

キャストには、次の構文を使用します。

(変換する型)変数名

例えば、int型の変数をdouble型に変換する場合は、次のように記述します。

// int型の値を宣言
int intValue = 10000;

// doubleに変換(キャスト)
double doubleValue = (double)intValue;

精度が落ちるキャストには注意

キャストする際の注意として、キャスト前の型のデータ範囲より、キャスト後の基本型で扱えるデータ範囲の方が、小さいとエラーなるか、精度が保証されない変換結果になります。

次のサンプルコードのような、doubleからfloatへのキャストはエラーになります。

double dobuleValue = 4.9E-324;
float floatValue = (double)dobuleValue;

上のコードを実行すると、結果が「0」となり、意図しない結果になっていることが分かります。

▪️ 実行結果

0.0

また、浮動小数点を整数型に変換するときも、精度が保証されず、意図しない結果になります。

double dobuleValue = 100.5;
int intValue = (int)dobuleValue;

▪️ 実行結果

100

Javaでは、dobuleなどの浮動小数点型の値を、intなどの整数型にキャストすると、小数点が切り捨てられます。

整数を除算するときの丸め込み

整数の除算で、小数が生じるときは、結果がゼロに向かって丸められます。

例えば、「5 / 2」をおこなえば、正しい答えは「2.5 」であるが、int型で除算すると、結果は丸められ「2」になります。

これを正しく計算するには、int型の値を浮動小数点型のfloatまたはdoubleキャストした後、除算を行います。

まとめ

javaのプリミティブ型(基本型)について、解説してきました。それぞれのプリミティブ型は、箱のサイズ(格納できる値の範囲)が決められており、範囲を超える値を入れると、意図しない結果になります。

事前に確認してから、適切な型を使用するようにしましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。