Java | Java 10から使える var を使った変数宣言(型推論)について

Java Java
スポンサーリンク

まず結論:var を使うと、変数宣言で型を書かなくてよくなる。代わりに「代入した値」からコンパイラが自動で型を決めます(型推論)。ただし使えるのは Java 10 以降 で、いくつか守るべきルールがあります。

1. 基本ルール(超大事)

  • 書き方は var 変数名 = 値;(例:var x = 10;)。宣言と同時に必ず値を代入してください。代入がないとコンパイラは型を決められずエラーになります。
  • var を使うと、x の実際の型はコンパイル時に決まります(例えば 10 を代入すれば int)。実行時に型が変わるわけではありません
  • varnull を代入して初期化するとダメ(型が特定できないためエラー)。
  • 同時に複数宣言(例: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

(サフィックス LF を付けることで型を明示できます。)


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

この例では ageintnameString として推論されます。


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 は使えないので覚えておく。
タイトルとURLをコピーしました