プログラミング

【Java初心者向け】基本型と参照型などのデータ型と型変換をマスターしよう!

プログラミング
この記事は約7分で読めます。
Sponsored Links

データ型とは

カウントダウン, カラフル, クラシック

Javaなどのプログラミング言語ではデータ型という言葉が頻繁に登場します。簡単に説明すると、データ型はそのデータの特性を示すものです。例えば、文字列が変数に入っているときはString型を使用し、整数を入れたいときはint型などを使用します。データ型にはたくさんの種類があり、大きく基本型と参照型の2つに分けることができます。

基本型・参照型とは

アルファベット, ゲーム, ことば

それでは基本型と参照型について学習していきましょう。

基本型(プリミティブ型)

名前サイズ
boolean1bittrue, false
byte8bit-128〜127整数
short16bit-32,768~32,767整数
int32bit-2,147,483,648~2,147,483,647整数
long64bit-9,223,372,036,854,775,808~9,223,372,036,854,775,807整数
float32bit±3.40282347E+38~ 1.40239846E-45単精度浮動小数点数
double64bit±1.79769313486231570E+308~±4.94065645841246544E-324倍精度浮動小数点数
char16bit0~65,535(負の値はない)Unicode文字

基本型は別名「プリミティブ型」とも言います。全部で8種類あり、これに該当しないものは全て参照型に分類されます。特に初心者はString型を基本型と勘違いすることが多いので、間違えないようにしましょう。基本型は全て覚えるようにしてくださいね!

基本型のを利用する上で注意点が2つあります。1つ目は「決められたのサイズを以上の値を格納することはできない」こと。2つ目は「適切な型を使うようにしなくてはならない」ということです。決められたサイズ以上の値を渡すとコンパイルエラーになるので気を付けましょう。

また、適切なものを使わないと、余分なメモリを使用してしまいます。基本型を利用する際は適切な型を使用するように心がけましょう。

byteの場合、値の部分の計算方法は2^8=256ですが、半分が負の値になります。(1byteは2つの文字を表すことができるため2^8となっています。)この仕組みを覚えることで暗記する必要はなくなってくるので、考え方は理解しておくようにしましょう。

またchar型で使われているUnicodeとは、1993年に作られた世界中の文字を集めた共通の文字符号化方式のことです。表記は¥u+(16進数の4桁)で表すことができ、負の値を使用することはできません。

基本データ型を代入する際は、右辺の値が左辺の変数にコピーされて行われます。

進数接頭語
2進数0b
8進数0
16進数0x

馴染み深い10進数以外にも2進数、8進数など様々なものがあります。よって、文字の先頭に以下の値をつけることで「明示的にする」というルールがあります。上記の接頭語をつける事で明示する事ができるので必ずつけるようにしましょう。

参照型(クラス型)

String
配列
List系
DtoやFormなどのクラスなど

参照型は別名「クラス型」とも呼ばれています。察しの良い人はお気づきかも知れませんが、これはクラスによる型のことを指します。クラスを箱としてその中に様々なデータを詰めてつかう事ができ、フィールドには、基本型以外にもクラス型を格納することもできます。

フィールドの数は決まっておらず、自分で作ることができるため数は無限です。最初は馴染みにくいと思いますが、自由自在に変数を定義できるものがクラス型といったイメージを持っておくと良いでしょう。

型変換

おもちゃ, おもちゃの動物, おもちゃフィギュア

次に型変換に関して学習していきましょう。型変換には自動型変換と強制型変換の2種類があります。

自動型変換

基本型の自動型変換

まず自動型変換です。基本データ型の型変換をする時に使われます。使われる場面は主に4種類あるので以下ではこれらを説明します。小数点以下が少ないものから大きいものへは自動型変換が可能です。逆の場合はコンパイルエラーになってしまうので注意しましょう。

①変数への代入時
//変数の定義
int score = 20;

//自動型変換
double score_2 = score;

これが1つ目の自動型変換です。score_2には20.0が代入されます。

②計算への利用時
//計算時の自動型変換
double score_1 = 10.0;
int score_2 = 20;

//計算内容
double fullScore = score_1 + score_2;

//出力
System.out.println(fullScore);

計算の時も代入の時と同様に、小数点以下が小さいものから大きいものに勝手に片変換されます。よってfullScoreは20.0になります。

③引数として利用時
//変数の定義
int t = 120;

//メソッドの利用
method(t);

//メソッドの定義
public void method(double t){

 //処理内容を記述

}

次に引数として利用される場合です。この場合も自動型変換が適応されます。int tを引数に入れるとdoubleは20.0になります。

④メソッドの戻り値として利用
//メソッドの呼び出しと返却
double t = method();

//定義内容
int method() {
 int i = 300;
  return i;
}

上記のコードを実行した場合は、tに300.0が代入されます。以上の4つの場面で自動型変換が使用される事があります。

参照型の自動型変換

画像に alt 属性が指定されていません。ファイル名: 図4-1-1024x352.png

次に参照型の自動型変換について学習していきましょう。参照型の型変換にてキャストが必要かどうかは、継承関係にあるかどうかで判断します。上記のようなクラス関係のSubクラスとSuperクラスがあったとします。

SubクラスからSuperクラスに型変換をしたい場合をアップキャストと呼びます。この場合は自動型変換が行われます。自動型変換の利用箇所は基本型の自動型変換とほぼ変わりませんが、インスタンスを生成するときに行われる場合があるのが注意点です。

次に参照型の自動型変換について学習していきましょう。参照型の型変換にてキャストが必要かどうかは、継承関係にあるかどうかで判断します。上記のようなクラス関係のSubクラスとSuperクラスがあったとします。

この場合、SubクラスからSuperクラスに型変換をしたい場合は自動型変換が行われます。SubクラスはSuperクラスを継承して作られているのでわざわざ相互性を再確認する必要がないからです。

自動型変換の利用箇所は基本型の自動型変換とほぼ変わりませんが、インスタンスを生成するときに行われる場合があるのが注意点です。

親クラス 変数名 = new 子クラスのコンストラクタ;

強制型変換(キャスト)

基本型の強制型変換

まず基本型の強制型変換について学習します。以下のコードを行おうとした場合は、キャストがないとコンパイルエラーが生じます。

int t =80;
short s = (short)t;

データ型の大きいものから小さいものに代入する際は、精度の低下が起こるためキャストを導入しなくてはなりません。よって、上記のようにint型をshort型に変更しようとした場合は、キャストを使用しましょう。

引数や戻り値で利用する場合も同様です。

参照型の強制型変換

参照型の自動型変換ができない場合は強制型変換を行います。スーパークラスからサブクラスへのキャストはダウンキャストと呼ばれます。一般的に一度アップキャストしたものをダウンキャストするという操作を行う場合に使われる事が多いです。

ラッパークラス

子供, おもちゃ, 前部積込み機, プラスチック, 砂のおもちゃ

ラッパークラスとは

基本型は参照型と違い、メソッドなどが定義されていません。よって、基本型の値をラップ(=包み込む)してオブジェクトとして利用できるようにするためのクラスが用意されてます。これを「ラッパークラス」と言います。

基本型ラッパークラス
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

BooleanクラスとCharacterクラスを除いたクラスは全て、数値を扱うためクラスである「Numberクラス」のサブクラスになっています。

ラッパークラスの利用方法

①オブジェクトの生成

//公式
new ラッパークラス(変数);
//例
new Integer(int型の値);

②初期化

//公式
ラッパークラス 変数 = ラッパークラス.valueOf(基本型 変数);

//例
Integer score = Integer.valueOf(90);

最後に

型変換はJavaの基礎中の基礎です。しかし舐めていると想定外のところでエラーが起きたり、予期せぬところで値が削られてしまったりします。特に計算系のシステムを作る場合は端数で大きなズレが生じてきてしまうので気を付けましょう。

タイトルとURLをコピーしました