まず結論:var を使うと、変数宣言で型を書かなくてよくなる。代わりに「代入した値」からコンパイラが自動で型を決めます(型推論)。ただし使えるのは Java 10 以降 で、いくつか守るべきルールがあります。
1. 基本ルール(超大事)
- 書き方は
var 変数名 = 値;(例:var x = 10;)。宣言と同時に必ず値を代入してください。代入がないとコンパイラは型を決められずエラーになります。 varを使うと、xの実際の型はコンパイル時に決まります(例えば10を代入すればint)。実行時に型が変わるわけではありません。varにnullを代入して初期化するとダメ(型が特定できないためエラー)。- 同時に複数宣言(例:
var a = 1, b = 2;)は使えません。1つずつ書きましょう。
2. 具体例(短く、わかりやすく)
var num = 10; // num は int 型 と推論される
var name = "Alice"; // name は String 型 と推論される
var pi = 3.14; // pi は double 型 と推論される
Java長さを明確にしたいとき(long や float)はリテラルにサフィックスをつけます:
var big = 10L; // big は long 型
var f = 3.14F; // f は float 型
Java(サフィックス L や F を付けることで型を明示できます。)
3. サンプルプログラム
ファイル名:JSample.java
class JSample {
public static void main(String[] args) {
var age = 24;
var name = "Yamada";
System.out.println("年齢:" + age);
System.out.println("氏名:" + name);
}
}
Javaコンパイル・実行(ターミナル):
javac -encoding UTF-8 JSample.java
java JSample
出力:
年齢:24
氏名:Yamada
この例では age が int、name が String として推論されます。
4. var を使うときの良い使いどころ/悪い使いどころ(初心者向けアドバイス)
良い使いどころ
- 型が明らかで冗長になるとき(例:
Map<String, List<Integer>> map = ...;が長すぎる場合)。 - ローカル変数(メソッド内)で、初期化値から型が一目でわかるとき。
避けた方がいい場面
- 初心者が読むと型が分かりにくくなるとき(例:
var x = methodCall();でmethodCallの返り値が何か分からない場合)。 - API のパブリック部分(メソッドの引数やフィールド宣言)には使えない/使わない(
varはローカル変数だけ)。
プロジェクトではチームで「どんなケースで var を使うか」をルール化すると読みやすさが保てます。
5. よくある間違い(エラー例と対処)
var x;→ エラー:「型を推論できません」。必ず初期化してください。var x = null;→ エラー:nullだけだと型がわからない。具体的なオブジェクトを代入するか、明示的な型を使う(例:String x = null;)。var a = 1, b = 2;→ エラー:複合宣言でvarは使えない。別々に書く:var a = 1; var b = 2;。
6. 練習問題(簡単) — 解答付き
問題1
次のコードで x の型は何になる?
var x = 5;
Java答え:int(整数リテラルは int)。
問題2
次のコードはコンパイルできますか? できない場合は理由を答えよ。
var y;
y = 10;
Java答え:コンパイル不可。var は宣言時に初期化が必要で、初期化がないと型を推論できないため。
問題3
次のコードの price の型は何?
var price = 2500L;
Java答え:long(末尾 L によって long 型のリテラルになっている)。
7. 最後に — 小さな実践ルール(初心者向けまとめ)
- 最初は「型が一目で分かるとき」に
varを使う練習をするとよい。 - メソッドの戻り値が分かりにくい箇所では避け、明示的に型を書く。
- フィールド(クラスのメンバ)やメソッドの引数には
varは使えないので覚えておく。
