こんにちは、かつコーチです。
Javaを学び始めると、最初につまずきやすいのが「型」の存在です。
PythonやJavaScriptでは変数に型を書きませんが、Javaでは必須です。
この記事では、Javaの変数(値を入れておく箱のようなもの)とプリミティブ型(Javaが最初から用意している基本のデータ型)の使い方を、実際に手を動かしながら理解できるように解説します。
変数とプリミティブ型とは?
変数の宣言と代入の基本
Javaの変数は「型 変数名 = 値;」という形で宣言します。
public class Main {
public static void main(String[] args) {
int age = 28;
double height = 172.5;
boolean isStudent = false;
System.out.println(age);
System.out.println(height);
System.out.println(isStudent);
}
}
型(データの種類を表す指定)を先頭に書くことで、コンパイラが「この変数にはこの種類の値しか入れない」と保証してくれます。
これにより、実行前に多くのミスをコンパイルエラーとして検出できるのがJavaの大きな特徴です。
なぜプリミティブ型が必要なのか
プリミティブ型とは、int・double・boolean・charなど、Javaにあらかじめ組み込まれている基本データ型のことです。
オブジェクトではなく単純な値そのものをメモリに直接持つため、処理が軽量で高速に動作します。
一方でJavaにはIntegerやDoubleのようなラッパークラス(プリミティブ型をオブジェクトとして扱えるようにしたクラス)も存在します。
コレクション(Listなど)にはプリミティブ型を直接入れられないため、ラッパークラスが必要になる場面があります。
この違いは中級以降でつまずきやすいポイントなので、まずは「プリミティブ型は軽量な素の値」と覚えておけば十分です。
基本の書き方:主なプリミティブ型一覧
数値を扱う型
Javaの数値型は、扱う桁数によって使い分けます。
byte smallNumber = 100;
short mediumNumber = 30000;
int normalNumber = 1000000;
long bigNumber = 10000000000L;
float pi1 = 3.14f;
double pi2 = 3.14159265358979;
実務では、整数は基本的にint、大きな数値(IDや件数の集計など)はlong、小数はdoubleを使うのが定番です。floatとlongはリテラル末尾にfやLを付ける必要がある点に注意しましょう。
文字・真偽値を扱う型
char initial = 'K';
boolean isActive = true;
charはシングルクォートで1文字を囲みます。
ダブルクォートで囲むと文字列(String)と誤解されてコンパイルエラーになるので気をつけてください。
よくあるつまずきポイント・エラー対処
intの範囲オーバーでハマった一次情報
私が実際にJavaを学び始めた頃、集計処理で以下のようなコードを書いてハマりました。
❌ Before
int total = 2_000_000_000 + 2_000_000_000;
System.out.println(total); // 期待は4000000000だが...
実行すると-294967296という意味不明な値が出力されました。
これはオーバーフロー(型が扱える範囲を超えて値が循環してしまう現象)が原因です。intは約-21億〜21億までしか扱えないため、合計が範囲を超えて負の値に「回り込んで」しまったのです。
✅ After
long total = 2_000_000_000L + 2_000_000_000L;
System.out.println(total); // 4000000000
大きくなる可能性がある数値は、最初からlongで宣言しておくのが安全です。
エラーメッセージすら出ずに黙って間違った値になる点が、この不具合の怖さです。
型変換で値が消えるつまずき
❌ Before
double price = 1980.75;
int intPrice = price; // コンパイルエラー
小数点以下の情報が失われる可能性がある変換(縮小変換)は、Javaが自動では許可してくれません。
✅ After
double price = 1980.75;
int intPrice = (int) price; // 明示的にキャストする。結果は1980
(int)のように型を明示するキャストを書くことで、「情報が失われるのを理解した上で変換する」という意図をコンパイラに伝えられます。
応用・一歩先の使い方
varによる型推論との付き合い方
Java 10以降ではvarを使うと、右辺の値から型を自動推論してくれます。
var count = 10; // intと推論される
var name = "かつコーチ"; // Stringと推論される
ただしvarは「型を書かなくていい」わけではなく、「型を省略して書ける」だけです。
一度決まった型はその後変更できませんし、可読性を優先してメソッドの引数や戻り値には使わないのが一般的なプラクティスです。
まとめ
この記事のポイント
- Javaの変数は「型 変数名 = 値;」で宣言し、型ごとに扱える範囲が決まっている
- プリミティブ型は軽量な基本データ型で、int・double・boolean・charなどがある
- 桁あふれ(オーバーフロー)はエラーが出ないまま値が壊れるため、大きな数値には
longを使う - 縮小変換にはキャストが必要で、情報の欠落を意識する必要がある
次に読むべき記事
- 演算子の基本(算術・比較・論理)
- Stringの基本:作成・比較・連結
タグ: Java, 初心者向け, 基本文法