トップ / カリキュラム / 第4章

CHAPTER 04

変数と型

プログラムは、値を「変数」という箱に入れて計算します。Javaはその箱に「型」というラベルを必ず付ける、少し厳格な言語です。なぜそうなっているのか、金額計算の例を交えて理解します。

読む目安:約20分なぜJavaは「型」にうるさいのか

この章でわかること

  1. 変数の宣言 int count = 3; を見て、何をしているか説明できる
  2. 代表的な型(int・long・double・boolean・String)の使い分けがわかる
  3. Javaが「型」を厳しくチェックする理由と、金額計算で BigDecimal を使う理由を言える

変数:値を入れておく箱

前の章の最後に見た請求書レポートは、「3件」「330,000円」という数字を直接書き込んでいました。実際のプログラムでは、数字は計算の途中で変わります。そこで必要になるのが変数(variable)です。変数は「値を一時的に入れておく、名前の付いた箱」です。

int count = 3;          // 「整数を入れる箱 count を作り、3 を入れる」
String month = "2026年9月";  // 「文字列を入れる箱 month を作り、文字を入れる」

1行目を分解すると、次の3つの要素でできています。

  • int型(type):この箱には「整数」しか入れられない、というラベル
  • count変数名:箱の名前。エンジニアが自由に付ける。慣例として先頭は小文字
  • = 3初期値:最初に入れておく値。= は「等しい」ではなく「右の値を左の箱に入れる」という意味

「=」は「代入」

プログラミングで最初につまずきやすいのがこの記号です。count = 3 は「countは3に等しい」ではなく、「countという箱に3を入れる」という動作を表します。だから count = count + 1; という一見おかしな式も成り立ちます。「今のcountの値に1を足して、countに入れ直す」、つまり「1増やす」という意味になります。

型:箱に貼られたラベル

Javaの大きな特徴は、すべての変数に型を付けなければならないことです。この性質を静的型付けと呼びます。箱を作るときに「整数用」「文字列用」とラベルを貼り、違う種類のものを入れようとするとコンパイラが止めてくれます。

int count = 3;
count = "三";    // ← コンパイルエラー。整数用の箱に文字列は入れられない

よく使う型を押さえておきましょう。まずは上の5つを見分けられれば十分です。

型入れられるもの例業務での使いどころ
int整数(約±21億まで)3、-120件数、数量、年月の数字
long大きな整数(約±922京まで)12000000000LIDの連番、円単位の大きな金額、ミリ秒
double小数(ただし近似値)0.1、3.14割合、物理量。金額には不向き(後述)
boolean真か偽か(はい/いいえ)true、false承認済みか、有効か、などのフラグ
String文字列"請求書"名前、コード、備考などの文字情報
char1文字'A'単独の文字を扱うとき(出番は少ない)
BigDecimal正確な小数new BigDecimal("1.10")金額・税率計算。経理関連では必須

int や double のように小文字で始まる型は基本型(プリミティブ型)と呼ばれ、Javaに最初から組み込まれた8種類です。一方、String や BigDecimal のように大文字で始まる型はクラスとして作られた型です(第6章)。見た目の大文字・小文字で区別できます。

なぜJavaは型にうるさいのか

型を書くのは手間です。PythonやJavaScriptのような言語では型を書かなくてもプログラムが動きます。それでもJavaが型を要求するのには、業務システムらしい理由があります。

理由1:間違いを「動かす前」に見つける

型のない言語では、「数量のつもりの箱に、うっかり顧客名を入れてしまった」というミスが、そのコードが実行される瞬間まで発覚しません。月に1回しか動かない月次処理の中にそのミスがあれば、本番の月末に初めてエラーが出ることになります。Javaではコンパイルの時点で「型が合いません」と止まるので、エンジニアの手元で発見できます。

理由2:大人数・長期間の開発で「意図」が伝わる

int quantity と書いてあれば、10年後に別の人が読んでも「ここには整数の数量が入る」と分かります。型は、コードに埋め込まれた仕様書の役割を果たします。

理由3:ツールが賢くなる

型が決まっていると、開発ツールが「この変数に対して使える操作」を正確に提案できます。エンジニアが使う開発ツール(IDE)の補完機能や、名前の一括変更が安全に行えるのは、型のおかげです。

型のゆるい言語(例:Python)

書くのが速い・短い
ミスは「動かしてみて」初めて分かることがある
小さなもの、試作、分析に向く

型の厳しい言語(例:Java)

書く量は増える
多くのミスを「動かす前」に発見できる
大人数・長期間・止められないシステムに向く
どちらが優れているかではなく、用途の違いです。内部統制の観点で言えば、Javaの型チェックは「入力時のバリデーション(妥当性検査)」をプログラムの内部でも徹底しているようなものです。

金額計算の落とし穴:0.1 + 0.2 は 0.3 ではない

ここは経理の方にぜひ知っておいてほしい話です。小数を扱う double 型には、10進数の小数を正確に表せないという性質があります。コンピューターは内部で2進数を使っていて、0.1のような値は「だいたい0.1」という近似値でしか持てないからです。

double a = 0.1 + 0.2;
System.out.println(a);   // → 0.30000000000000004 と表示される

1円単位の計算が何万件も積み上がる経理システムで、この誤差を放置するわけにはいきません。そこでJavaの標準ライブラリには、BigDecimalという「10進数を正確に扱う型」が用意されています。

import java.math.BigDecimal;   // 標準ライブラリから BigDecimal を使う宣言

BigDecimal price = new BigDecimal("300000");  // 本体価格
BigDecimal rate  = new BigDecimal("1.10");    // 税率 10%
BigDecimal total = price.multiply(rate);        // 掛け算 → 330000.00

読んでみる:BigDecimal では × の記号が使えず、.multiply(...)(掛ける)というメソッドで計算します。少し回りくどいですが、その代わり1円の誤差も出ません。端数処理(四捨五入・切り捨て)の方法も明示的に指定します。

システム検収で確認したいこと

会計まわりのシステムを導入・改修するとき、「金額の計算に double を使っていませんか?」「端数処理のルール(切り捨て/四捨五入、どの桁で)はどこで決まっていますか?」は、非エンジニアでも聞ける、そして聞く価値のある質問です。消費税の計算やインボイス制度の端数処理ルールに関わる部分は、まさにここです。

型の変換と、よく見る表現

最後に、コードを読んでいるとよく出てくる表現を2つだけ紹介します。

// 文字列を数値に変換(入力欄の "120" を計算に使いたいとき)
int qty = Integer.parseInt("120");

// 数値を文字列にして連結(+ は文字列同士なら「つなげる」の意味になる)
String msg = "件数:" + count + "件";   // → "件数:3件"

// var:右側を見れば型が明らかなとき、型名を省略できる(Java 10以降)
var customer = "フューチャー商事";   // String型だとコンパイラが判断してくれる

var を使っても型がなくなるわけではなく、コンパイラが右側から型を推測して付けてくれているだけです。「型を書かない」のではなく「書くのを省ける」という違いです。

この章のまとめ

  • 変数は値を入れる箱。int count = 3; は「整数用の箱 count に 3 を入れる」。= は代入
  • Javaは静的型付け。すべての箱に型のラベルを付け、合わない値はコンパイル時に止める
  • 型にうるさい理由は、ミスを動かす前に見つける・意図を伝える・ツールを賢くするため。大規模・長期の業務システム向きの性質
  • double は小数が近似値になるため金額に不向き。金額・税率は BigDecimal で正確に計算する

確認クイズ

この章の内容を3問で確かめましょう。選ぶとすぐに解説が表示されます。

Q1. int total = 330000; という1行の説明として正しいものはどれですか?

int が型(整数用)、total が変数名、= 330000 が初期値の代入です。= は「等しい」ではなく「入れる」です。

Q2. Javaが変数に必ず型を付けさせることの利点として、適切でないものはどれですか?

型を書くぶん、コードはむしろ長くなります。その代わりに、ミスの早期発見や意図の伝達という利点が得られます。

Q3. 消費税込みの金額を計算するプログラムで、Javaではどの型を使うのが適切ですか?

double は 0.1 のような値を近似値でしか持てず、金額計算では誤差の原因になります。金額・税率には BigDecimal を使うのが定石です。

読み終えたら、読了にしておきましょう。トップページのカリキュラムに記録が付きます(このブラウザ内だけに保存されます)。