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

Java Java
スポンサーリンク

var練習問題リスト

  1. 基本の宣言
    • varを使って整数、文字列、小数をそれぞれ変数に代入して表示してみましょう。
      例:年齢(int)、名前(String)、身長(double)
  2. 計算してみる
    • varで宣言した整数を使って、足し算・引き算・掛け算・割り算をして結果を表示してみましょう。
    • 小数を含む計算をして、結果の型がどうなるか確認してみましょう。
  3. リストを使う
    • varを使ってArrayList<String>を作り、好きな果物を3つ追加して、for文で表示してみましょう。
  4. Mapを使う
    • varを使ってHashMap<String, Integer>を作り、果物と値段を登録して、拡張for文で「果物 : 値段」と表示してみましょう。
  5. エラーを体験する
    • var x; のように初期化せずに宣言してみて、なぜエラーになるか確認しましょう。
    • var y = null; を試して、なぜエラーになるか確認しましょう。
    • var a = 10, b = 20; を試して、なぜエラーになるか確認しましょう。
  6. 型を推測してみる
    • var price = 120; の型は何になるか?
    • var tax = 120 * 0.1; の型は何になるか?
    • 実際にSystem.out.println(((Object)tax).getClass().getName());で確認してみましょう。

ポイント

  • varは「便利な省略記法」だけど、型が見えにくくなることもある
  • 練習では「型がどう推論されるか」を意識して確認すると理解が深まります

👉 これらを順番にやっていくと、varのルールと使いどころが自然に身につきます。


では、先ほど挙げた「初心者向け var 練習問題」に対して、模範解答コードと解説をつけてまとめます。


1. 基本の宣言

class Sample1 {
    public static void main(String[] args) {
        var age = 18;          // int型
        var name = "Hanako";   // String型
        var height = 160.5;    // double型

        System.out.println("名前: " + name);
        System.out.println("年齢: " + age);
        System.out.println("身長: " + height);
    }
}
Java

解説

  • 18 → 整数リテラルなので int
  • "Hanako" → 文字列なので String
  • 160.5 → 小数なので double

2. 計算してみる

class Sample2 {
    public static void main(String[] args) {
        var a = 10;        // int型
        var b = 3;         // int型
        var sum = a + b;   // int型
        var div = a / b;   // int型(整数同士の割り算は小数点以下切り捨て)
        var div2 = a / 3.0; // double型(小数を含むのでdouble)

        System.out.println("合計: " + sum);
        System.out.println("整数割り算: " + div);
        System.out.println("小数割り算: " + div2);
    }
}
Java

解説

  • 整数同士の割り算は int 型で小数点以下は切り捨て
  • 小数を含めると double 型になる

3. リストを使う

import java.util.ArrayList;

class Sample3 {
    public static void main(String[] args) {
        var fruits = new ArrayList<String>(); // ArrayList<String>型

        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        for (var fruit : fruits) { // fruitはString型
            System.out.println(fruit);
        }
    }
}
Java

解説

  • new ArrayList<String>() から型が推論されるので、fruitsArrayList<String>
  • 拡張for文の fruit も自動的に String 型になる

4. Mapを使う

import java.util.HashMap;

class Sample4 {
    public static void main(String[] args) {
        var prices = new HashMap<String, Integer>(); // HashMap<String, Integer>型

        prices.put("Apple", 100);
        prices.put("Banana", 200);

        for (var entry : prices.entrySet()) { // entryはMap.Entry<String, Integer>型
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }
}
Java

解説

  • HashMap<String, Integer> の型が長いので var が便利
  • entry の型は Map.Entry<String, Integer> だが、var で省略できる

5. エラーを体験する

class Sample5 {
    public static void main(String[] args) {
        // var x;          // エラー!初期化が必要
        // var y = null;   // エラー!型が決められない
        // var a = 10, b = 20; // エラー!複数同時宣言は不可
    }
}
Java

解説

  • var は必ず初期化が必要
  • null だけでは型が決まらない
  • 複数同時宣言はできない

6. 型を推測してみる

class Sample6 {
    public static void main(String[] args) {
        var price = 120;       // int型
        var tax = 120 * 0.1;   // double型

        System.out.println("priceの型: " + ((Object)price).getClass().getName());
        System.out.println("taxの型: " + ((Object)tax).getClass().getName());
    }
}
Java

👉 出力例

priceの型: java.lang.Integer
taxの型: java.lang.Double

解説

  • 整数リテラルは int 型 → Integer として表示される
  • 120 * 0.1 は小数を含むので double 型 → Double として表示される

総まとめ

  • varは「型を省略できる便利な書き方」
  • ただし「必ず初期化」「型が分かる値を代入」「複数同時宣言は不可」などルールがある
  • 特に 型が長いとき・for文・Mapやリストの処理 で役立つ
タイトルとURLをコピーしました