Developer

【はじめてのJava】データ型と変数【データ型と変数編】
2020.09.30
Lv1

【はじめてのJava】データ型と変数【データ型と変数編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


データ型と変数編

データ型と変数編では、様々なプログラミング言語で利用されている「データ型」や「変数」の考え方や使い方を扱っていきます。

今回は「データ型」や「変数」とは何なのかを扱っていきます。


目次


データ型とは

 データ型 とはそのデータがどんな種類のデータなのかを示すものです。

例えば目の前に「20201231」と書かれていたとします。われわれ人間はこれが「数字」なのか「日付」なのか「文字の羅列」なのかを、周りの状況から無意識に判別できます。しかしコンピュータは無意識に判別することはできません※。そこで代わりに「データ型」という考え方を利用してデータの種類を判別します。

Javaでは、先ほどの「20201231」がそのまま書かれていた場合はデータ型は「整数型」だと判断し、整数を表すデータ型の一種である「int型」のデータとして扱います。「"20201231"」のように、" "(半角ダブルクォーテーション)で囲まれていた場合は「文字列型」だと判断し、文字列を表す「String型」のデータとして扱います。
「int型」や「String型」については別の記事で詳しく触れますので、まずは「データ型」でデータの種類を判別しているということを意識してください。

基本データ型とオブジェクト参照型

Javaにはたくさんのデータ型がありますが、扱い方の違いから大きく2種類に分類されます。一つは「基本データ型(プリミティブ型)」と呼ばれるものです。もう一つは「オブジェクト参照型(参照型、レファレンス型)」と呼ばれるものです。例で出てきたint型は「基本データ型」に分類され、String型は「オブジェクト参照型」に分類されます。

「基本データ型」や「オブジェクト参照型」の詳しい説明は別の記事で扱いますので今はあまり深く意識しなくて大丈夫です。まずは「データ型」という考え方に慣れてください。


プチコラム:データ型の自動判別について

Java以外の言語の中にはデータ型を自動判別しているように見えるものもあります。しかし実際には何らかの決まりに則って判別を行っています。そのため、時にはプログラマが意図したデータ型と異なるデータ型として認識されてしまいプログラムの実行中にトラブルを起こすこともあります。

Javaの場合も、Java10で「ローカル変数型推論」と呼ばれる、データ型を自動判別しているように見える機能が追加されました。これは初期化(後述)の値からデータ型を推測するというものです。詳しくは別の記事で執筆予定ですので今は気にしなくて大丈夫です。

どうしても気になる場合はこちらの記事もご覧ください。


変数とは

 変数 とは、何らかの値を保持しておくための場所です。変数はデータ型の考え方と併せて良く利用されます。

例えば目の前に千円札が3枚あったとします。この時の合計金額は「1000円 × 3 = 3000円」となります。われわれ人間は、この「3000」を脳内に保持します。Javaでは「変数」と呼ばれる場所に「3000」を保持します。では、Javaでは具体的にどのように「変数」を利用するのでしょうか。

変数宣言

変数を作ることを 変数を宣言する と言います。

われわれ人間が何か道具を利用する場合、まずは道具を作らないといけません。それと同じように、Javaで「変数」という道具を利用する場合、まずは変数を作成します。変数を作成することを変数を宣言すると言います。

変数を宣言する際には、変数同士を区別するために名前を付けます。変数に付ける名前識別子)のことを 変数名 と言います。

変数宣言の方法

Javaで変数を宣言する場合、以下のように書きます。

データ型 変数名;
変数宣言の例

変数の説明で出てきた「合計金額」を保持する変数を作成してみます。

変数を宣言するためには「データ型」と「変数名」の2つを決める必要があります。

データ型を考える

まず「合計金額」のデータ型を考えます。

日本の場合、金額は整数で表現できます。ですので「合計金額」のデータ型は「整数型」にしましょう。整数型は複数ありますが、ここではとりあえずデータ型の例で出てきた「int型」を利用することにしましょう。

変数名を考える

次に、変数名を考えます。今回は合計金額を示す英語の「total fee」を基にした「totalFee」としましょう。
変数名の詳しいルールについてはこちらの記事で紹介しています。また、Javaの場合の慣例こちらの記事で紹介しています。

変数を宣言する

以上をまとめて変数を宣言します。合計金額を保持する「int型」の変数「totalFee」ですので、以下のようになります。

int totalFee;

※行末のセミコロンを忘れないように注意しましょう。

これで変数を宣言できました。


プチコラム:変数の種類

Javaの変数には「ローカル変数」「インスタンス変数」「static変数」という変数があります。しばらくの間は「ローカル変数」しか出てきません。それぞれの変数の詳しい違いなどは追々出てきますので、今はそういったものがあることだけ覚えておけばOKです。


変数の初期化

 変数の初期化 とは作成したばかりの変数に値を入れることです。

初期化されていない変数にはどんな値が保持されているのか不明瞭です。そのまま利用することはプログラムの誤動作を引き起こす可能性があり危険です。そこでJavaの場合、変数は使用前に初期化する必要があります。初期化されていない変数を利用しようとするとコンパイルエラーを起こします。

初期化されていない変数を利用することは危険と意識してもらえればOKです。


値の代入

変数に値を記憶させることを 変数に値を代入する と言います。特に変数の宣言後、初めて値を代入する場合が変数の初期化です。

変数に代入できるのは同じもしくは互換性があるデータ型のみです。例えば整数を表すint型と文字列を表すString型には互換性がないので、int型の変数にString型の値は代入できません。

値の代入の方法

Javaで変数に値を代入する場合、以下のように書きます。

変数名 = 代入する値;
値の代入の例

変数宣言で宣言した「totalFee」に値を代入する場合は以下の通りです。※先に変数totalFeeが宣言されている必要があります。

totalFee = 3000;
値の更新

変数に保持した値は後から更新することも可能です。例えばtotalFeeを5000に変更する場合は以下のようになります。

totalFee = 5000;

プチコラム:自動初期化

Javaの変数には、自動的に初期化されるものとされないものがあります。プチコラム:変数の種類で名前の挙がった「ローカル変数」は自動的には初期化されません。一方で「インスタンス変数」「static変数」は自動的に初期化されます。


プチコラム:1000増やしたいとき

詳しくは演算子の記事で紹介しますが、totalFeeを1000増やしたい場合は以下の通りです。

totalFee = totalFee + 1000;

また、複合代入演算子を用いると以下のように書くこともできます。

totalFee += 1000;

変数の内容を確かめる

変数の内容確かめるためにはSystem.out.println()を利用して画面に表示すると手っ取り早いです。

例えば値の代入が終わった変数totalFeeの内容を画面に表示して確かめる場合は以下のように( )の中に変数名を入れます。

System.out.println(totalFee); //変数totalFeeの内容が画面に表示される

Hello World!の時のように" "で囲んでしまうと 変数名ではなく文字列だとみなされてそのままtotalFeeという文字列が表示される ので注意してください。

System.out.println("totalFee"); //文字列totalFeeがそのまま表示される

サンプルソース

今回の内容をまとめたサンプルソースです。

public class Sample{
  public static void main(String[] args){
    
    //変数totalFeeを宣言
    int totalFee;
    //以下の場合は初期化前なのでコンパイルエラーを起こす。
    //System.out.println(totalFee); 
    
    //totalFeeを初期化
    totalFee = 3000;
    System.out.println(totalFee); //3000
    
    //totalFeeの値を更新
    totalFee = 5000;
    System.out.println(totalFee); //5000
    
    //以下の場合は画面にはtotalFeeという文字列が表示されます。
    System.out.println("totalFee");

    //以下の場合は代入できないのでコンパイルエラーを起こす。
    //totalFee = "10000"; //"10000"は" "で囲まれているため文字列(String)型
  }
}

実行結果は以下の通りです。

変数使用時の注意点

変数を利用する際によくある間違いを以下に挙げます。ソースコード作成時には注意してください。
・データ型や変数名などに全角文字を使ってしまう
・変数宣言時や代入時の末尾の;を忘れる
・変数名を" "で囲んでしまう
・変数のデータ型と代入する値のデータ型が一致していない場合は代入できない


ポイント

Javaは「データ型」によってデータの種類を識別している
値を記憶しておきたい場合「変数」を利用する
変数は「宣言」しないと使えない
変数は必ず「初期化」された後に利用する
変数のデータ型と互換性がないデータは代入できない


データ型と変数編・次回の内容

今回は「データ型」や「変数」について扱いました。データ型と変数編・次回はJavaのデータ型の基本となる「基本データ型」の説明を行います。


はじめてのJavaシリーズの目次はこちら
データ型と変数編の記事一覧はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら