変数:値を入れておく箱
前の章の最後に見た請求書レポートは、「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京まで) | 12000000000L | IDの連番、円単位の大きな金額、ミリ秒 |
double | 小数(ただし近似値) | 0.1、3.14 | 割合、物理量。金額には不向き(後述) |
boolean | 真か偽か(はい/いいえ) | true、false | 承認済みか、有効か、などのフラグ |
String | 文字列 | "請求書" | 名前、コード、備考などの文字情報 |
char | 1文字 | '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)
金額計算の落とし穴: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 を使うのが定石です。